我想获得尚未选择的房型?

时间:2017-12-21 15:20:17

标签: mysql

表1(房间类型)

type_id type_name

表2(会议室)

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'))

2 个答案:

答案 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