我有一个按分类法关联内容的数据库,我试图通过分类法查询该内容。它看起来像这样:
Table 1
content_id, content_name
Table 2
content_id, content_taxonmoy
我在查询中尝试的是查找包含两种或更多类型相关分类的内容。我的查询如下:
SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123'
除了它什么都不返回。我后来尝试了一个小组:
SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123'GROUP BY content_id, content_taxonomy
但这也不起作用。有什么建议吗?
答案 0 :(得分:1)
SELECT *
FROM content c
WHERE (
SELECT COUNT(*)
FROM taxonomy t
WHERE t.content_id = c.content_id
AND t.content_taxonomy IN ('ABC', '123')
) = 2
在UNIQUE INDEX
上创建PRIMARY KEY
或taxonomy (content_id, content_taxonomy)
,以便快速开展工作。
SELECT c.*
FROM (
SELECT content_id
FROM taxonomy
WHERE content_taxonomy IN ('ABC', '123')
GROUP BY
content_id
HAVING COUNT(*) = 2
) t
JOIN content c
ON c.content_id = t.content_id
在这种情况下,请在UNIQUE INDEX
上创建PRIMARY KEY
或taxonomy (content_taxonomy, content_id)
(请注意订单或字段)。
任何一种解决方案都可能比另一种解决方案更有效或更有效,具体取决于每种内容的分类数量以及匹配的概率。