mySQL:从同一个表中获取记录联合

时间:2016-05-27 18:52:13

标签: mysql sql

我有两张牌型号和汽车零件。两者都与 partfitment 表相关,其唯一字段是主键 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的部分。

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

1 个答案:

答案 0 :(得分:1)

我认为您可以在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;