我有4张桌子
POST:
id
POST_TAG:
post_id
tag_id
value
TAG:
id
SEARCH:
tag_id
post_tag_value
我需要查询具有所有标签和值作为SEARCH表中的行的帖子(不仅仅是标签的一个相等值):
编辑:很抱歉没有提供当前查询和足够的信息.
SELECT POST.id FROM POST,POST_TAG, SEARCH
WHERE
POST.id = POST_TAG.post_id AND
POST_TAG.tag_id= SEARCH.tag_id AND
POST_TAG.value = SEARCH.value;
如果SEARCH表有一行,它将起作用.问题是,当它有更多时.结果应该更少,但实际上更多(如果用2行进行测试,则正确的结果是重复的行;我正在寻找交集而不是并集)
查询的结果为’1′,’1′,’2′.它应该仅是“ 1”,因为它同时具有两个“标签”,而“ 2”仅具有一个.
解决方法:
SELECT pt.post_id
FROM SEARCH s INNER JOIN post_tag pt ON pt.tag_id = s.tag_id AND pt.value = s.value
GROUP BY pt.post_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM SEARCH)
请注意,在您的小提琴中,ID为0的帖子也应返回,因为它同时具有(0,’yes’)和(1,’yes’)元组.
标签:sql-match-all,sql,mysql
来源: https://codeday.me/bug/20191101/1981730.html