2010-10-08 3 views
0

Это, наверное, очень простой вопрос, это просто очень сложно для Google слова вроде «Все».SQL "Все" Функциональность?

SELECT a.Id, Max(b.Number) 
FROM Table1 a 
JOIN Table2 b 
    ON a.FK = b.Id 
GROUP BY a.Id 

Но я хочу добавить, где положение, указывающее, что все b.Id привязанный к a.FK должны иметь значения. Поэтому в основном я не хочу выбирать a.Id группировку b.Id, где любой из этих b.Id имеет значение null. Надеюсь, я сделал это ясно, дайте мне знать, если мне нужно уточнить. Благодарю.

Edit - Для некоторых разъяснений (Измененный запрос выше, а):

Table1 
Id, FK 
1 1 
1 2 
2 3 
3 4 
3 5 
3 6 

Table 2 
Id Number 
1 1 
2 NULL 
3 10 
4 20 
5 30 
6 40 

Я хочу, чтобы мой запрос, чтобы показать:

a.Id Max Number 
2  10 
3  40 

(Обратите внимание, что A.id = 1 Безразлично» т показать, потому что один из полого b.Number равно нуль)

+0

Можете ли вы предоставить некоторые данные образца и желаемый результат? –

+0

пока вы делаете внутреннее соединение, каким вы являетесь, вы должны быть хорошими. вы возвращаете значения null max (b.id)? – Beth

+0

В таблице 2 могут быть как значения «NULL», так и «NOT NULL» для номера для любого заданного идентификатора? –

ответ

1
select t1.Id, max(Number) as [Max Number] 
from Table1 t1 
left join Table2 t2 ON t1.FK=t2.Id and t2.Number is not null 
group by t1.Id 
having count(distinct t1.FK) = count(distinct t2.Id) 
0

ВЫБЕРИТЕ a.id, Макс (b.Id)
оТ Table1
РЕГИСТРИРУЙТЕСЬ Table2 б
НА a.FK = b.Id
ГДЕ b.Id НЕ NULL
GROUP BY A.id

+0

Извините, я допустил ошибку в моем вопросе, пожалуйста, см. Править. – Ocelot20

1

Хорошо, вы задаете совершенно иной вопрос, от кого я думал, что ты , Я заменяю свой ответ.

Способ, которым я бы справился с этим, состоит в том, чтобы дважды присоединить a к b - один раз, чтобы получить все соответствующие строки в b и второе соединение для поиска строк в b, где Number - null. Если такой строки нет, мы знаем, что все они не равны нулю.

SELECT a.Id, Max(b1.Number) 
FROM Table1 a 
JOIN Table2 b1 ON a.FK = b1.Id 
LEFT OUTER JOIN Table2 b2 ON a.FK = b2.Id AND b2.Number IS NULL 
WHERE b2.Id IS NULL 
GROUP BY a.Id 

b2.Id будет пустым, только если строка не найдена, где b2.Number имеет значение null.

+0

Извините, я допустил ошибку в моем вопросе, пожалуйста, см. Править. – Ocelot20

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