我有三张桌子:
房屋表
less
会议室表
id title description
--------------------------
1 Big House Very big house
2 Small House Very small house
Houses_Rooms表
id title room_status
--------------------------
1 Green room 24
2 Yellow room 25
3 Blue room 24
例如,我有房间状态 24。
我需要从房间表获取所有房屋房间 room_status = 24.但是,如果房屋 房间与 room_status 不同我们不需要选择这个房子。
我构建了一些查询,并使用了id house_id room_id
-------------------------
1 1 1
2 2 3
3 1 2
。它有效,但返回的房屋具有相同的 room_status ,因为WHERE house.id IN (SELECT ...)
。
答案 0 :(得分:1)
你似乎想要所有房间都有24的房屋。
WHERE house.id IN (SELECT ...)
是个好主意。现在您需要一个子查询,其中只包含只有24个房间的房屋。
select *
from houses
where id in
(
select hr.house_id
from houses_rooms hr
join rooms r on r.id = hr.room_id
group by hr.house_id
having min(r.room_status) = 24
and max(r.room_status) = 24
);
然而,由于房屋根本不可能没有房间,我们可以简单地将房屋排除在非房地产的24间房间之外:
select *
from houses
where id not in
(
select house_id
from houses_rooms
where room_id in (select id from rooms where status <> 24)
);
答案 1 :(得分:0)
以下查询选择所有拥有room_status = 24房间的房屋,但不包括同时拥有room_status&lt;&gt;的房屋。 24.它可能会进一步优化,但我的SQL有点生疏:
select h.*
from houses h
join houses_rooms hr on h.id = hr.house_id
join rooms r on hr.room_id = r.id
where r.room_status = 24
and h.id not in (
select h.id
from houses h
join houses_rooms hr on h.id = hr.house_id
join rooms r on hr.room_id = r.id
where r.room_status <> 24
);
答案 2 :(得分:0)
您应该使用INNER JOIN
代替子查询来进行此类查询。
SELECT
HR.ID
,H.Title
,H.Description
,R.Title
FROM #House_Room HR
INNER JOIN #Houses H on HR.HouseID = h.ID
INNER JOIN #Rooms R on HR.RoomID = r.ID
WHERE R.RoomStatus = 24
返回:
1 | Big House | Very big house | Green room
2 | Small House | Very small house | Blue room
答案 3 :(得分:0)
试试这个:
VARIABLE2 = VARIABLE;
答案 4 :(得分:0)
这应该有效,因为它使用JOINS
来获得有room_status = 24
空间的人,然后使用NOT IN
来排除那些拥有其他room statuses
SELECT * FROM Houses_Rooms hr
JOIN Houses h on hr.house_id = h.id
JOIN Rooms r on hr.room_id = r.id
WHERE r.room_status = 24
AND h.id NOT IN(
SELECT h.house_id FROM Houses_Rooms h
JOIN Rooms r on h.room_id = r.id
WHERE r.room_status <> 24
)
答案 5 :(得分:0)
Select houses.title as 'house name'
From houses, rooms,houses_rooms
where houses.id=houses_rooms.house_id
and rooms.id=houses_rooms.room_id
and rooms.room_status=24
尝试这个..不是100%肯定..我通常不使用连接。