2013-02-19 96 views
0

我试图返回所有的房间没有在ts_allocation表中存在(即尚未分配),或者有悬而未决,在ts_allocation表故障或拒绝状态。房间可以满足其中一个条款。SQL查询省略某些值

但是有几个值如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

请将您的问题简化为相关部分,并且不仅在小提琴中发布这些细节。 – 2013-02-19 02:08:13

+0

重复:http://stackoverflow.com/questions/14947940/changing-sql-query-from-one-condition-to-several/14948960#14948960,不要多次发布相同的查询 – Tahbaza 2013-02-19 02:55:08

回答

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部分给你更多结果所有的房间 - 这些客房要么挂起,拒绝或状态失败。