我有2张桌子。
A
Id Name
1 ab
2 cd
3 eg
4 fg
B
FkID
1
2
2
1
1
2
4
由于FKID列的B中没有3。我需要在表A中找到计数,而表A中的计数在表B中也具有FKID值。 因此总数应该为3。在我的查询中,左联接后得到7。
答案 0 :(得分:4)
您不需要加入,可以使用EXISTS
进行加入:
select count(*) from a
where exists (
select 1 from b
where b.fkid = a.id
)
我相信EXISTS
比联接更有效,但是如果需要联接,则必须像这样INNER JOIN
:
select count(distinct a.id)
from a inner join b
on b.fkid = a.id
答案 1 :(得分:2)
使用COUNT(DISTINCT B.FkId)
可获得结果。 COUNT未考虑NULL
的值,因此以下查询将起作用。
SELECT COUNT(DISTINCT B.FkId) AS Occurence
FROM TableA A
LEFT JOIN TableB B ON B.FkId = A.Id;
或者也可以通过INNER JOIN
实现
SELECT COUNT(DISTINCT B.FkId) AS Occurence
FROM TableA A
INNER JOIN TableB B ON B.FkId = A.Id;
包含示例数据的演示
DECLARE @TableA TABLE (Id INT, [Name] VARCHAR (2));
INSERT INTO @TableA (Id, [Name]) VALUES
(1, 'ab'),
(2, 'cd'),
(3, 'eg'),
(4, 'fg');
DECLARE @TableB TABLE (FkId INT);
INSERT INTO @TableB (FkId) VALUES
(1),
(2),
(2),
(1),
(1),
(2),
(4);
SELECT COUNT(DISTINCT B.FkId) AS Occurence
FROM @TableA A
LEFT JOIN @TableB B ON B.FkId = A.Id