我有 2 张 table ,分别是汽车模型和汽车零件。两者都与 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 的部件。
我尝试使用联合,但出现错误。
最佳答案
我认为您可以将逻辑包含在 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:从同一个表获取记录并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490490/