我有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/