包含多个标记的SQL查询

时间:2010-09-26 15:05:37

标签: sql mysql tags

我非常善于解释这一点。但我尽我所能:

我为人们制作了一个标记工具。有些人包含超过1个标记,我需要得到那些但不知道如何编写SQL查询以包含多个标记。

我知道你不能写这样的条件:
LOWER(peoples_tags.tag_id)='外部'和
LOWER(peoples_tags.tag_id)='summer'

因为每个人的结果都在他自己的行上,而“外面”和“夏天”不会在同一行。因此,使用此查询不会得到任何结果。

这是整个查询:
SELECT DISTINCT peoples。*,tags.tag FROM people
JOIN peoples_tags ON peoples_tags.people_id = peoples.id
JOIN标签ON tags.tag = peoples_tags.tag_id AND
LOWER(peoples_tags.tag_id)='外部'和
LOWER(peoples_tags.tag_id)='summer'

那么我如何编写多标签SQL条件?有人知道吗? 抱歉我的英文不好:)

1 个答案:

答案 0 :(得分:5)

您需要使用OR代替AND。现在你的思考过程是这样的:“我需要获取关键字在'外部',行的关键字为'summer'的行,因此我需要使用AND” 。但是RDBMS看到它的方式,如果关键字是'在室内'关键字是'夏天',你想要返回给定的行...所以你真正需要的是{{1} },而不是OR

编辑:

我明白你现在想做什么。很抱歉以前没有仔细阅读。

试试这个(可能有更高效/可扩展的方式,但这应该有效)

AND

编辑2:

假设tag_id和people_id的组合是peoples_tags的唯一键,以下内容也可以使用:

SELECT
    *
FROM
    people
WHERE
    EXISTS(
        SELECT
            *
        FROM
            peoples_tags
        WHERE
            peoples_tags.people_id = people.id AND
            peoples_tags.tag_id = 'outside'
    ) AND
    EXISTS(
        SELECT
            *
        FROM
            peoples_tags
        WHERE
            peoples_tags.people_id = people.id AND
            peoples_tags.tag_id = 'summer'
    )