给定表:
parts (part_id, part_desc, type_id, car_id)
types (type_id, type_name)
cars (car_id, car_model, car_make)
我想找到具有“ Honda”(本田)和“ Civic”(本田)模型的所有零件类型的零件的汽车的ID,模型和品牌。也就是说,如果本田思域的类型为
A,B,C
,则它将查找所有具有A
和B
和C
零件的汽车。我不确定如何执行此操作,但是我设法针对
A
或B
或C
SELECT DISTINCT c.car_id, c.car_model, c.car_make
FROM cars c, parts p
WHERE c.car_id= p.car_id AND p.type_id IN (
SELECT p.type_id FROM cars c, parts p
WHERE a.car_id = p.car_id
AND a.car_model = 'Civic'
AND a.car_make = 'Honda'
)
内部查询在其中获取本田思域的所有类型的零件,但如果IN()子句仅具有
A,B,C
之一而不是全部,则将匹配汽车。我想避免使用
ALL
和ANY
集合运算符。同样,A,B,C
是一个例子,在答案中不能硬编码。子查询的结果将是未知的。 最佳答案
为避免使用诸如“ all”之类的词,请使用两个否定来重新表述问题:
您想要本田思域没有但没有的车型。
SELECT *
FROM cars
WHERE NOT EXISTS (SELECT 1
FROM types CivicTypes
JOIN parts CivicParts USING (type_id)
WHERE car_id = (SELECT car_id
FROM cars
WHERE car_make = 'Honda'
AND car_model = 'Civic')
AND NOT EXISTS (SELECT 1
FROM types JOIN parts USING (type_id)
WHERE type_id = CivicTypes.type_id
AND car_id = cars.car_id)
)
关于mysql - 查找所有使用相同零件类型的汽车,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26162207/