2015-01-25 2 views
1

Я пытаюсь перечислить данные из таблицы, где эквивалентные данные в другой таблице не были введены. Немного словесно, но я точно пытаюсь это сделать:Выберите столбец из одной таблицы, где он равен NULL в другом

Я действительно в тупике, пытаясь вытащить данные там, где их нет в комнате, любая помощь приветствуется.

Спасибо!

е:

SELECT 
    COUNT(a.x) AS p, 
    COUNT(a.x) AS q, 
FROM 
    x 
LEFT JOIN b ON a.x= b.x 
WHERE b.xis NULL; 
+0

Опубликуйте свои структуры таблиц и желаемый результат. – potashin

+0

Обычно что-то подобное делается с 'OUTER JOIN', а затем' WHERE IS NULL' –

+2

'WHERE NOT EXISTS' является вашим другом. –

ответ

1
select h.* 
from hotel as h 
left join room as r 
on h.number = r.hotelnumber 
where r.hotelnumber is null 
+0

Да. Внутреннее соединение дает вам запись в обеих таблицах, в этом случае вам нужно использовать Left join или right join – Santhosh

0

Хотя Santhosh опубликовал хорошее решение, я хотел бы рекламировать EXISITS, так как это более идиоматических. Запрос должен быть прочитан новому разработчику, как предложение, которое описывает, что вы хотите сделать (если это возможно).

И оптимизатор oracle, по-видимому, отлично работает с EXISTS в больших запросах (я не могу ссылаться на точные источники, как раз из многих запросов на аскете или подобных сайтах, EXISTS, похоже, оптимизируется во многих ситуациях, когда подобные утверждения могут сбой внутри большой запрос ...)

SELECT * FROM hotel h 
WHERE NOT EXISTS 
(SELECT * FROM room r 
    WHERE r.hotelnumber = h.number 
) 

Прочитать: Дайте мне все Гостиницы, в которых нет номера с номером отеля. -> Дайте мне все отели без каких-либо номеров.

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