SQL查询省略了某些值

时间:2013-02-19 02:03:47

标签: mysql

我正在尝试返回 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)

1 个答案:

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