2015-12-30 5 views
0

У меня довольно простой вопрос SQL. У меня есть запрос, который извлекает данные из нескольких таблиц. Просто получил новый запрос присоединиться к другой таблице. Здесь создается упрощенная версия http://sqlfiddle.com/#!6/f9698/4SQL Server: присоединиться к критериям

Я хочу, чтобы все записи слева (Prod1) стол. В таблице ProdAttr будет указано несколько записей для каждого ProdID. Но я хочу вытащить только те, где критерии соответствуют в следующем запросе. Я не уверен, следует ли мне использовать соединение или объединение! Пожалуйста, порекомендуйте.

select 
    P1.*, PA.AttrDesc 
from 
    prod1 P1 
left join 
    ProdAttr PA on P1.ProdID = PA.ProdID 
where 
    AttrID= 4 and AttrVal=68; 

Спасибо.

ответ

1

В случае отказа left join колонки из таблицы ProdAttr заполнены null. В этих случаях ваш where будет отфильтровать строки, потому что null не является ни 4, ни 68:

where AttrID= 4 and AttrVal=68; 

Переместить условие в on положение как:

select P1.*, PA.AttrDesc from prod1 P1 
    left join ProdAttr PA 
    on P1.ProdID = PA.ProdID 
    and AttrID= 4 and AttrVal=68; 

Теперь условие используется только для поиска строки в ProdAttr, а не как фильтр на результат соединения между prod1 и ProdAttr.

+0

Блестящий. Я не знал, что могу добавить условия в предложение join. Я забыл упомянуть одно. поэтому, если есть совпадение, я показываю описание атрибута, но если нет совпадения, могу ли я добавить текст? – Eclipse

+0

Вы можете использовать 'isnull', чтобы отобразить альтернативный текст, например' select P1. *, Isnull (PA.AttrDesc, 'Not Found') from ... ' – Andomar

+0

Ты босс. к вам. – Eclipse

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