我有 one_to_many
关系,其中我有 3 个表 images
、items
和 image_items
.. 每张图片都可以有一个或多个项目,我想在传递项目/项目 id/id 的地方进行查询,并根据此图像中的项目数获取特定图像(正好是一个图像)...
这是我到目前为止尝试过的方法,但它有一个问题,它给了我这个数量或更多的图像,我不确定这个逻辑或结构是否首先有效:
SELECT `image_items`.`image_id`
FROM `image_items`
WHERE `image_items`.`item_id` IN(1, 2)
GROUP BY `image_items`.`image_id`
HAVING count(image_items.image_id) = 2
这是 fiddle
假设图像 (1) 有项目 (1,2,3),图像 (2) 有项目 (1,3),图像 (3) 有项目 (1,2) ..假设我想要图像正好有 (1,2) .. 对于我的查询,即使有不同的查询,当我只想要图像 (3) 时,它也会给我图像 (1,3)。
最佳答案
删除 WHERE 子句并在 HAVING 子句中添加一个条件:
SELECT image_id
FROM image_items
GROUP BY image_id
HAVING
COUNT(DISTINCT item_id) = 2
AND
SUM(item_id NOT IN (1, 2)) = 0
参见 demo .
结果:
| image_id |
| -------- |
| 4 |
关于mysql - 计数准确的地方不多或少 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57195827/