我有两张牌型号和汽车零件。两者都与 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的部分。
我尝试使用联盟,但收到错误。
答案 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;