我有一个 mysql 表 T1,它由两列 INT 组成,将 car_id 链接到 part_id。一个car_id可以有多个part_id,同一个part_id可以对应多个car_id。例如,
car_id part_id
1 1
1 2
1 8
2 3
3 4
4 2
4 6
...
10 1
10 2
...
20 1
20 2
20 8
为了获取与 car_id = 1 关联的所有 part_id,我运行查询,
SELECT car_id, part_id FROM T1 WHERE car_id=1
并得到结果:
car_id part_id
1 1
1 2
1 8
现在,我想找到所有剩余的 car_id,这些 car_id 至少包含(比如 >= 2/3)与 car_id=1 关联的 part_id。 (在这个例子中,我应该得到所有 car_ids,它们至少有 2 个 part_ids 1,2, 和 8,如我的 SELECT 查询后所示。所以,我应该得到 car_ids 1,10, 和 20)。
我可以使用以下方法找到包含所有 part_ids 1,2 和 8 的 car_ids:
SELECT car_id, part_id
FROM T1
WHERE part_id = ALL (SELECT part_id FROM T1 WHERE car_id=1). The result is car_ids 1 and 20.
我可以使用以下方法找到包含任何值 1,2 和 8 的 car_id:
SELECT car_id, part_id
FROM T1
WHERE part_id = ANY (SELECT part_id FROM T1 WHERE car_id=1). The result is car_ids 1,4,10 and 20.
如何在 ANY 和 ALL 之间指定一些数字?
最佳答案
要获取所有 car_id
具有 2 个或更多汽车 1
的 part_id
做
SELECT car_id,
group_concat(part_id) as part_ids
FROM T1
WHERE part_id in (SELECT part_id FROM T1 WHERE car_id = 1)
group by car_id
having count(distinct part_id) >= 2
关于MySQL 在 ANY 和 ALL 之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043875/