这可能是一个非常简单的问题,谷歌就像“全部”这样的词语很难。
SELECT a.Id, Max(b.Number)
FROM Table1 a
JOIN Table2 b
ON a.FK = b.Id
GROUP BY a.Id
但我想添加一个where子句,指定链接到a.FK的所有b.Id必须具有值。所以基本上我不想选择b.Id的a.Id分组,其中任何一个b.Id都是null。希望我说清楚,如果我需要详细说明,请告诉我。感谢。
编辑 - 有一些说明(也改变了上面的查询):
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 :(得分: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为空的行时才为空。
答案 1 :(得分: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)
答案 2 :(得分:0)
选择a.Id,Max(b.Id)
从表1中a
加入表2 b
在a.FK = b.Id
在哪里b.Id不是NULL
GROUP BY a.Id