gpt4 book ai didi

php - MySQL查询题..我放弃!

转载 作者:可可西里 更新时间:2023-11-01 07:48:36 26 4
gpt4 key购买 nike

*UPDATE,似乎给出了答案,但是 SQL 查询出错了.. 任何人都可以帮忙吗?看到第一个答案,我把问题贴在那里。

简单来说。我有 3 张 table 。一个“项目”表和一个“标签”表。然后我还有一个“item_tag”表,将两者联系在一起。

我想进行一个查询,列出所有分配有特定标签的项目。所以我希望查询列出所有应用了标签 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`

最佳答案

使用 JOIN:

 SELECT it.fk_item_id
FROM ITEM i
JOIN ITEM_TAG it1 ON it1.fk_item_id = i.id
AND it1.fk_tag_id = 148
JOIN ITEM_TAG it2 ON it2.fk_item_id = i.id
AND it2.fk_tag_id = 152

使用 GROUP BY/HAVING COUNT:

  SELECT it.fk_item_id
FROM ITEM_TAG it
WHERE it.fk_tag_id IN (148, 152)
GROUP BY it.fk_item_id
HAVING COUNT(*) = 2

买者自负:
查询的 GROUP BY/HAVING COUNT 版本取决于您的数据模型是否具有为所涉及的两列定义的唯一或主要复合键(fk_item_idfk_tag_id).如果这没有到位,数据库将不会停止添加重复项。如果数据中可能存在重复行,此版本可能会返回误报,因为 item_id 可能与 tag_id 有 2 个关联 148 - 这将满足 HAVING COUNT (*) = 2

关于php - MySQL查询题..我放弃!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com