我要加入两个表:
DECLARE @Temp TABLE (
id INT)
INSERT INTO @Temp
VALUES (5)
,(2)
,(3)
DECLARE @Temp2 TABLE (
member_id INT)
INSERT INTO @Temp2
VALUES (5)
,(1)
,(3)
我如何计算可以左联接和不能左联接的行数。 在此示例中:@Temp中的5和3可以与@ Temp2连接,而@Temp中只有2不能连接。 我希望我的输出显示以下内容:
+--------+------------+
| Joined | Not_Joined |
+--------+------------+
| 2 | 1 |
+--------+------------+
答案 0 :(得分:2)
您可以使用COUNT和SUM在单个查询中执行此操作。这应该产生您想要的结果。
DECLARE @Temp TABLE (
id INT)
INSERT INTO @Temp
VALUES (5)
,(2)
,(3)
DECLARE @Temp2 TABLE (
member_id INT)
INSERT INTO @Temp2
VALUES (5)
,(1)
,(3)
select Joined = count(t2.Member_id)
, NotJoined = sum(case when t2.Member_id is null then 1 end)
from @Temp t
left join @Temp2 t2 on t2.member_id = t.id
答案 1 :(得分:0)
存在于@ Temp2中的@Temp中的计数:
SELECT COUNT(*) FROM @TEMP WHERE ID IN(SELECT MEMBER_ID FROM @TEMP2)
@ Temp2中的计数不在@Temp中:
SELECT COUNT(*) FROM @TEMP2 WHERE MEMBER_ID NOT IN(ID FROM @TEMP)
现在要创建一个结果集,有很多方法,但是这里有一个简单的方法:
SELECT
(SELECT COUNT(*) FROM @TEMP2 WHERE MEMBER_ID IN(ID FROM @TEMP)) AS [Joined],
(SELECT COUNT(*) FROM @TEMP WHERE ID NOT IN(SELECT MEMBER_ID FROM @TEMP2)) AS [NotJoined]
@Sean Lange的答案更特定于JOIN问题,我的答案只是计算列表中存在的内容。
答案 2 :(得分:-1)
Select count(*) as 'NOT Joined ',
(Select t1.count(*) from table1
t1)-count(*) as 'Joined'
from table1 where id NOT IN (Select member_id from table2);
基本上,左连接的工作方式是两个 表加上表2中不存在的表1的值。