У меня есть таблица mySQL со столбцами: имя и метка. Если у человека «Боб» есть ярлыки «крутой», «забавный» и «ребяческий», в моей таблице будут соответствующие строки: (Боб, крутой), (Боб, смешной) и (Боб, детский).
Есть ли эффективный способ выбрать людей на основе меток с помощью логического запроса? Например, в псевдо-SQL: ВЫБЕРИТЕ имя, ГДЕ человек (КРУТОЙ ИЛИ НЕ СМЕШНОЙ), А НЕ ДЕТСКИЙ.
Я думаю, что мог бы взломать что-то вместе, используя UNION, JOIN, может быть, некоторые подзапросы, но мне было интересно, есть ли эффективный способ сделать это.
РЕДАКТИРОВАТЬ:
На данный момент я планирую распространять И, т.е. ((КРУТО ИЛИ НЕ СМЕШНО) И НЕ ПО-ДЕТСКИ) => (КРУТО И НЕ ПО-ДЕТСКИ) ИЛИ (НЕ СМЕШНО И НЕ ПО-ДЕТСКИ). И тогда я могу определить каждую из частей, которые объединены ИЛИ вместе с чем-то вроде:
SELECT DISTINCT a.name
FROM `tags` AS a
JOIN `tags` AS b ON (a.label='cool' AND a.name=b.name AND b.name NOT IN (
SELECT name FROM `tags` WHERE label='funny'))
JOIN `tags` AS c ON (a.name=c.name AND c.name='childish')
# for "COOL AND NOT FUNNY AND CHILDISH"
А затем используйте UNION, чтобы соединить их вместе.