SQL "все" функциональность? - PullRequest
0 голосов
/ 09 октября 2010

Это, наверное, очень простой вопрос, просто очень сложно отыскать слово типа "Все".

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

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

Редактировать - Для пояснения (также изменился и запрос выше):

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 равно нулю)

Ответы [ 3 ]

1 голос
/ 09 октября 2010

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

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

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 равен нулю.

1 голос
/ 09 октября 2010
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 голосов
/ 09 октября 2010

ВЫБРАТЬ a.Id, Макс. (B.Id)
ИЗ Table1 a
ПРИСОЕДИНИТЬСЯ Table2 b
ON a.FK = b.Id
Где b.Id не равен NULL
GROUP BY.Id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...