我正在尝试返回 ts_allocation 表中不存在的所有房间(即尚未分配)或 ts_allocation 表。房间可以满足其中一个条款。
但是有几个值如D.0.02被忽略(请参考小提琴)?为什么是这样?它存在于具有上述状态的 ts_allocation 中 - 但它似乎不符合某个条款。我该如何解决这个问题?
这是我的SQLFiddle:http://sqlfiddle.com/#!2/e1021/6
SELECT
*
FROM
ts_room rm
WHERE
NOT EXISTS (
SELECT 1
FROM ts_roompref rp
JOIN ts_request rq
ON rp.request_id = rq.id
AND day_id = 1
AND period_id = 1
WHERE
rm.id = rp.room_id)
AND NOT EXISTS (
SELECT 1
FROM ts_roompref rp
JOIN ts_allocation a
ON rp.request_id = a.request_id
AND a.status <> 'Pending'
AND a.status <> 'Failed'
AND a.status <> 'Declined'
WHERE
rm.id = rp.room_id)
答案 0 :(得分:0)
SELECT rm.*
FROM ts_room rm
LEFT JOIN (
SELECT a.*, rp.room_id
FROM ts_roompref rp
INNER JOIN dbo.ts_allocation a on a.request_id = rp.request_id) x
ON x.room_id = rm.id
WHERE x.id is null
or (x.id is not null and x.status in ('Pending', 'Failed','Declined'))
x.id is null
为您提供尚未分配的所有会议室,or
部分为您提供更多结果 - 那些处于待定,拒绝或失败状态的会议室。< / p>