type_id type_name
room_id room_type_id room_property_id
我想根据property_id
仅获取房间表中未包含的房型SELECT `rt`.`type_id`,
`rt`.`type_name`
FROM `ae_room_type` AS `rt`
WHERE type_id NOT IN (
(SELECT GROUP_CONCAT(room_type_id)
FROM ae_rooms
WHERE room_properties_id = '5dea0ab1-e527-4882-a2df-9c592ea826a4'))
答案 0 :(得分:1)
一个简单的方法是LEFT JOIN
:
SELECT t1.*
FROM room_types t1
LEFT JOIN rooms t2
ON t1.type_id = t2.room_type_id AND
t2.room_properties_id = '5dea0ab1-e527-4882-a2df-9c592ea826a4'
WHERE t2.room_type_id IS NULL;
这里的想法是我们尝试将每个房间类型记录加入房间表。那些从未出现在房间表中的房间类型将无法加入。在这种情况下,此类记录仅在结果集中出现一次,而不是重复。联接后房间表中的null
值是房间类型的标记,但尚未在任何房间使用。
答案 1 :(得分:0)
您还应该使用子查询来过滤所需的房间属性,然后使用带有IS NULL条件的LEFT JOIN来仅获取其余房间中未包含的类型:
SELECT rt.type_id,
rt.type_name
FROM ae_room_type as rt
LEFT JOIN (SELECT room_properties_id,
room_type_id
FROM ae_rooms
WHERE room_properties_id = '5dea0ab1-e527-4882-a2df-9c592ea826a4') AS r
ON rt.type_id = r.room_type_id
WHERE r.room_type_id IS NULL