SQL分类帮助

时间:2011-01-11 14:28:22

标签: sql mysql postgresql

我有一个按分类法关联内容的数据库,我试图通过分类法查询该内容。它看起来像这样:

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

但这也不起作用。有什么建议吗?

1 个答案:

答案 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 KEYtaxonomy (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 KEYtaxonomy (content_taxonomy, content_id)(请注意订单或字段)。

任何一种解决方案都可能比另一种解决方案更有效或更有效,具体取决于每种内容的分类数量以及匹配的概率。