我在SQL的左连接中有一个场景,它没有生成我需要的所需输出。以下是表格形式和我尝试过的查询的描述,
表A
A_ID // PK OF TABLE A
IS_ACTIVE // VALUE=1 OR 0
表B
B_ID // PK OF TABLE B
A_ID // FK OF TABLE A IN TABLE B
表A的样本记录
A_ID IS_ACTIVE
1 1
2 0
3 1
4 0
5 0
表B的样本记录
B_ID A_ID
1 1
2 1
3 4
4 4
5 4
6 4
从A.A_ID = B.A_ID
上的左连接B中选择*
A_ID IS_ACTIVE B_ID A_ID
1 1 1 1
1 1 2 1
2 0 NULL NULL
3 1 NULL NULL
4 0 3 4
4 0 4 4
4 0 5 4
4 0 6 4
5 0 NULL NULL
从A.A_ID = B.A_ID和A.IS_ACTIVE = 0
上的左连接B中选择*
以下输出是上述查询的实际输出,通过在ON子句后添加AND is_active = 0来对记录没有影响。
A_ID IS_ACTIVE B_ID A_ID
1 1 1 1
1 1 2 1
2 0 NULL NULL
3 1 NULL NULL
4 0 3 4
4 0 4 4
4 0 5 4
4 0 6 4
5 0 NULL NULL
以下输出是必需输出,我需要解决我的问题。
A_ID IS_ACTIVE B_ID A_ID
1 1 NULL NULL
1 1 NULL NULL
2 0 NULL NULL
3 1 NULL NULL
4 0 3 4
4 0 4 4
4 0 5 4
4 0 6 4
5 0 NULL NULL
我在获取所需的确切记录时遇到问题。 我需要来自表A 的所有记录以及来自表B 的匹配记录,但是 那些表B 的记录等于表A 的is_active = 0。
注意:查询应显示表A
的所有记录请帮助我如何在SQL的左连接中获得此方案。
答案 0 :(得分:3)
我尝试将您的示例作为代码。我得到你需要的结果。有什么问题?
CREATE TABLE #a(a_id int, is_active bit)
CREATE TABLE #b(b_id int, a_id int)
INSERT INTO #a(a_id,is_active)
VALUES(1,1),(2,0),(3,1),(4,0),(5,0)
INSERT INTO #b(b_id,a_id)
VALUES(1,1),(2,1),(3,4),(4,4),(5,4),(6,4)
SELECT *
FROM #a as a
LEFT JOIN #b as b
ON a.a_id = b.a_id
AND a.is_active = 0
DROP TABLE #a
DROP TABLE #b
答案 1 :(得分:0)
你试过了吗?
Select * from A left join B on A.A_ID=B.A_ID
Where A.IS_ACTIVE=0