我有 2 张桌子
项目:
name
id
other
.part:
name_part
id
other
我想进行查询以查找与name_part = 'a' 和 name_part = 'b' 链接
的项目同一项目中的 2 个不同部件
查询:
SELECT item.name
FROM item
INNER JOIN table1 ON item.id = part.id
WHERE part.name_part = 'a' AND part.name_part = 'b'
输出我们 '0'
也许带有嵌套WHERE
?
我已经尝试过,但我找不到如何使其工作。
PS:我已经问过一个类似的问题,但它非常不精确。
你可以用 EXISTS 来做:
SELECT i.name
FROM item i
WHERE
EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'a')
AND
EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'b')
或连接表,按项目分组并在 HAVING 子句中设置条件:
SELECT i.name
FROM item i INNER JOIN part p
ON i.id = p.id
WHERE p.name_part IN ('a', 'b')
GROUP BY i.name
HAVING COUNT(DISTINCT p.name_part) = 2
尽管我使用了示例数据中的列名,但我认为表part
中的列id
应重命名为类似item_id
的名称,因为它引用了item
的id
。
Forpas的解决方案非常合理。 不过,这个答案扩展了你的尝试。
你可以用join
做你想做的事,但你需要其中两个:
SELECT i.name
FROM item i JOIN
part pa
ON pa.id = i.id AND
pa.name_part = 'a' JOIN
part pb
ON pb.id = i.id AND
pb.name_part = 'b';
您的版本无法正常工作,因为name_part
不能在同一行中同时'a'
和'b'
。