2014-12-17 2 views
-1

Мне нужно выбрать несколько столбцов из двух таблиц в базе данных SQL Server. Мне нужно использовать что-то вроде следующего:SQL Server: SELECT во внутреннем соединении с несколькими предложениями

SELECT 
    c.itmtxt, a.attr1val, a.attr2val, a.attr3val 
FROM 
    code c 
JOIN 
    codeattribute a ON c.itmcd = a.itmcd 
WHERE 
    c.catcd = 1 
    AND c.itmtxt = 2 
    AND a.attr1val = 'A' 

Однако, когда я добавляю последним, где и утверждения запроса не работает. Если я заканчиваю единственным предложением WHERE, код работает так, как ожидалось.

Может ли кто-нибудь увидеть, что не так?

Спасибо!

+2

Можете ли вы разместить образец данных? Первое, что приходит на ум, - это то, что ваши критерии WHERE не соответствуют существующим данным. Или c.itmtxt может не быть целым типом данных. – rwking

+0

или, может быть, вы хотели 'OR' вместо' AND' ... – cha

+0

Что вы не получаете от того, что ожидали получить? – ThomasMcLeod

ответ

0

Вам нужно будет переместить AND a.attr1val = 'A' в предложение о соединении.

SELECT c.itmtxt, a.attr1val, a.attr2val, a.attr3val FROM code c 
JOIN codeattribute a ON c.itmcd = a.itmcd AND a.attr1val = 'A' 
WHERE c.catcd = 1 
AND c.itmtxt = 2 
+0

Это не сработает, потому что в 'INNER JOIN' не имеет значения, где добавляется предложение фильтрации. Оба условия «ON» и «WHERE» ведут себя одинаково. Только с 'OUTER JOINS', где место фильтрующей материи. – Deepshikha

+0

Спасибо за информацию, @Deepshikha. Я не понимал, что это так. –

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