mySQL:从同一个表获取记录并集

标签 mysql sql

我有 2 张 table ,分别是汽车模型和汽车零件。两者都与 partfitment 表相关,该表的唯一字段是主键 modelIDpartID。 我正在尝试显示适合我选择的模型车的零件。 以下工作正常:

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/

相关文章:

mysql - 统计学生人数并显示在另一个表中

mysql - Hibernate相互一对一关系

python - 在 SQLAlchemy Core 中执行多个独立语句?

mysql - 存储过程会提高性能吗?

php - SQL OR 功能类似于 AND

mysql - 想在具有新关系 id 的 mysql 表中插入重复数据

php - 如何使用 anchor 标记打开存储在 MySQL 表中的 PDF 文件

sql - Oracle (+) 常数值运算符

mysql - 选择最近的每个值,在 x 日期之前,如果不在 x 日期之后,并且不在其他表中

mysql - innoDB - 我应该关闭 innodb_flush_log_at_trx_commit 吗?