首页 > 解决方案 > 创建视图并加入 2 个表查询

问题描述

我把自己绑在这个结上,所以希望有人能帮忙。

我需要创建一个视图表并将 2 个表连接在一起,但我只需要显示缺少数据的条目。

所以,我有一个表格列出了我拥有的无人机,包括制造商、序列号和购买日期,还有另一个表格列出了维护数据,包括每个设备收到的维护类型。该表还包括与第一个表类似的数据。

我需要从第一个表中提取设备数据并将其与维护表进行比较,并显示未接受特定类型维护的无人机。

这是我尝试过的

CREATE VIEW uncommissioned AS
SELECT DISTINCT 
    drone.manufacturer AS manufacture, 
    drone.serial, 
    drone.type, 
    drone.purchase_date, 
    maintenance.type AS maintenance
FROM drone 
INNER JOIN maintenance ON drone.type = maintenance.type
WHERE maintenance.type = 'NULL';

但这给出了一张空桌子,关于我哪里出错了有什么建议吗?

标签: mysqlsqljoinsql-view

解决方案


我认为你想要一个反LEFT JOIN

CREATE VIEW uncommissioned AS
SELECT DISTINCT 
    d.manufacturer AS manufacture, 
    d.serial, 
    d.type, 
    d.purchase_date, 
    d.type AS maintenance
FROM drone d
LEFT JOIN maintenance m ON d.type = m.type
WHERE m.type IS NULL;

笔记:

  • 要检查无效性,您需要IS NULL构造(您的代码检查 litteral string 'NULL'):

  • 如果要显示维护类型,则需要从表中获取该信息,drone而不是从maintenance表中获取

你也可以用一个NOT EXISTS条件和一个相关的子查询来表达这个:

CREATE VIEW uncommissioned AS
SELECT DISTINCT 
    d.manufacturer AS manufacture, 
    d.serial, 
    d.type, 
    d.purchase_date, 
    d.type AS maintenance
FROM drone d
WHERE NOT EXISTS (SELECT 1 FROM maintenance m WHERE d.type = m.type)

推荐阅读