我有2个桌子,一个汽车模型和汽车零件。两者都与零件表相关,零件表中的唯一字段是主键modelID和partID。
我试图显示适合我选择的模型车的零件。
以下工作正常:

SELECT tblmodel.modelID,
       tblmodel.model,
       tblparts.part,
       tblparts.part_number,
       tblparts.description,
       tblparts.list_price
FROM   (tblmodel
        INNER JOIN tblpartfitment
                ON tblmodel.modelID = tblpartfitment.modelID)
       INNER JOIN tblparts
               ON tblpartfitment.partID = tblparts.partID
WHERE  tblmodel.modelID = 1;


tblparts表具有名为Universal_part的tinyint字段。我正在尝试在原始查询中包含所有具有Universal_part = true的部分。

换句话说,始终返回通用的所有部分以及用于指定的modelID的所有部分。

我尝试使用联合,但收到错误。

最佳答案

我认为您可以在ON子句中添加逻辑:

SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price
FROM tblmodel m INNER JOIN
     tblpartfitment pf
     ON m.ModelID = pf.modelID INNER JOIN
     tblparts p
     ON pf.partID = p.partID OR p.universal_part = 1
WHERE m.ModelID = 1;


编辑:

使用union可能是最好的选择:

SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price
FROM tblmodel m INNER JOIN
     tblpartfitment pf
     ON m.ModelID = pf.modelID INNER JOIN
     tblparts p
     ON pf.partID = p.partID AND p.universal_part <> 1
WHERE m.ModelID = 1
UNION ALL
SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price
FROM tblmodel m CROSS JOIN
     tblparts p
WHERE p.universal_part = 1;

关于mysql - MySQL:从同一表获取记录并集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37490490/

10-12 03:16