我非常善于解释这一点。但我尽我所能:
我为人们制作了一个标记工具。有些人包含超过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条件?有人知道吗? 抱歉我的英文不好:)
答案 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'
)