给定表:

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,则它将查找所有具有ABC零件的汽车。

我不确定如何执行此操作,但是我设法针对ABC

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之一而不是全部,则将匹配汽车。

我想避免使用ALLANY集合运算符。同样,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/

10-10 09:27