mysql通过select in where not in子句中的多列进行匹配

jljoyd4f  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(311)

问题:
我有一份属于不同建筑的房间清单。例如:

Laundry Room, Building A, 1st Floor
Apartment 102, Building A, 1st Floor
Laundry Room, Building B, 1st Floor
Office Suite 1, Building B, 2nd Floor

我经常要检查电子表格,看看我收到的房间/建筑组合是否已经在数据库中或需要创建。
我试过的:
我创建了一个脚本,用电子表格中的数据填充下面的临时表。正在正确填充临时表:

CREATE TEMPORARY TABLE IF NOT EXISTS room_test
(id INT AUTO_INCREMENT, room_name VARCHAR(45), 
building_name VARCHAR(45), floor_name VARCHAR (45), PRIMARY KEY (id));

然后,我编写了这个查询来查找临时数据库中不在生产数据库中的所有内容。

SELECT DISTINCT room_name, building_name, floor_name
FROM room_test
WHERE room_name, building_name, floor_name NOT IN
(
SELECT r.name, b.name, f.name
FROM room AS r
JOIN building AS b ON r.building_id = b.id
JOIN floor AS f ON r.floor_id = f.id
);

我正在找回错误。
我也试过这个:

SELECT DISTINCT room_name, building_name, floor_name
FROM room_test
WHERE room_name NOT IN
(
SELECT r.name
FROM room AS r
JOIN building AS b ON r.building_id = b.id
JOIN floor AS f ON r.floor_id = f.id
GROUP BY r.name, b.name, f.name
);

但输出不完整。
我期望的产量
我试图从生产数据库中不存在的临时表中获取房间名称、建筑名称和楼层名称的每个唯一配对的列表。
三部分匹配非常关键,因为您可以在两个不同的建筑中的同一楼层拥有一个同名的房间,也可以在同一建筑中的不同楼层拥有两个同名的房间。
如果有人能帮我解决这个问题,我们将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题