0

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

1 に答える 1

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一部はより多くの結果を提供します- 保留中、不承認、または失敗のいずれかのステータスを持つ部屋。

于 2013-02-19T02:32:52.693 に答える