我有一個帶有列名稱和標籤的mySQL表。如果一個人,「鮑勃」的標籤是「酷」,「有趣」和「幼稚」,我的桌子會有相應的行:(鮑勃,酷),(鮑勃,有趣)和(鮑勃,幼稚)。在mySQL中進行聯合和交叉的有效方法
有沒有一種有效的方法來根據帶有布爾查詢的標籤選擇人員?例如,在僞SQL中:SELECT名稱在哪裏人是(冷或不是有趣)而不是孩子。
我想我可以使用UNION,JOIN,也許一些子查詢一起破解一些東西,但我想知道是否有一種有效的方法來做到這一點。
編輯:
截至目前,我打算分發和,即((冷卻或不好笑)和稚氣未)=>(冷卻和稚氣未)OR(NOT滑稽和稚氣未)。然後,我可以確定每個部件與以下類似的東西:
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將它們連接在一起。
我認爲這樣做效率很高,我不知道有什麼其他方式可以使它更有效率, – adamjmarkham