*更新,似乎给出了答案,但SQL查询他的错误..任何人都可以帮忙吗?看到第一个答案,我在那里发布了问题.
所以简单地说.我有3张桌子. “项目”表和“标签”表.然后我还有一个“item_tag”表,将2连在一起.
我想创建一个查询,列出分配了特定标签的所有项目.所以我希望查询列出所有应用了标签x和标签y的项目.
这是我到目前为止所提出的…除了这将列出任何匹配标签ID 148或标签ID 152.如果我说它“AND”它没有显示任何结果.
SELECT *
FROM (`item`)
RIGHT OUTER JOIN `item_tag` ON `item`.`id` = `item_tag`.`fk_item_id`
WHERE `item_tag`.`fk_tag_id` = "152" OR `item_tag`.`fk_tag_id` = "148"
GROUP BY `item`.`id`
解决方法:
SELECT fk_item_id
FROM item_tag
WHERE fk_tag_id IN (5,10,15)
GROUP BY fk_item_id
HAVING COUNT(*) = 3
然后就是
SELECT *
FROM item
WHERE id
IN
(
SELECT fk_item_id
FROM item_tag
WHERE fk_tag_id IN (5,10,15)
GROUP BY fk_item_id
HAVING COUNT(*) = 3
)
你只需要修改id和3,即那些id的计数.
当您的表没有UNIQUE约束(它应该有)并且特定项目中可以有相同的标记时,您应该将查询修改为:
SELECT *
FROM item
WHERE id
IN
(
SELECT fk_item_id
FROM ( SELECT disTINCT fk_item_id, fk_tag_id FROM item_tag ) someAlias
WHERE fk_tag_id IN (5,10,15)
GROUP BY fk_item_id
HAVING COUNT(*) = 3
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。