2013-02-19 3 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

Пожалуйста, упростите вашу проблему в соответствующих частях и разместите эти детали не только в скрипке. –

+0

duplicate: http://stackoverflow.com/questions/14947940/changing-sql-query-from-one-condition-to-several/14948960#14948960, не отправляйте один и тот же запрос несколько раз – Tahbaza

ответ

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 часть дает вам больше результаты - те номера, которые имеют либо Pending, Отклонено или Состояние сбой.

Смежные вопросы