SQL LEFT JOIN

  问题遇到的现象和发生背景
SQL 问题
表1
code 1 nameA
code 2 nameA
code 3 nameA
code 3 nameB
code 4 nameC
表2
code1 nameA
code2 nameA
code3 nameB
code4 nameD
找出 表1中 code 对应的 name 在 表2 中 同样的code 没有对应同样的name 的 name.

答案:
name A code3
name C code4

nameC 在表2中没有,很容易找出来,
nameA 如何找?

问题相关代码,请勿粘贴截图
SELECT name, code
FROM 表1
LEFT JOIN 表2 ON 表1.name = 表2.name
WHERE 表2.code is NULL

运行结果及报错内容
name C code4

我的解答思路和尝试过的方法
我想要达到的结果
nameA code3
name C code4

img


DECLARE @表1 TABLE(code NVARCHAR(10),Name NVARCHAR(10))
DECLARE @表2 TABLE(code NVARCHAR(10),Name NVARCHAR(10))
INSERT @表1(code, Name)VALUES
('code1','nameA'),
('code2','nameA'),
('code3','nameA'),
('code3','nameB'),
('code4','nameC')
INSERT @表2(code, Name)VALUES
('code1','nameA'),
('code2','nameA'),
('code3','nameB'),
('code4','nameD')

SELECT * FROM @表1 a 
WHERE NOT EXISTS (SELECT 1 FROM @表2 b WHERE a.code=b.code AND a.Name=b.Name)
select a.code,a.name from table1 a
  where not exists  
    (select t.code,t.name from table1 t 
       join table2 t1 on t.code=t1.code and t.name=t1.name 
         where a.code=t.code and a.name=t.name)
group by a.code,a.name

解析:
1、先找出表1和表2code和name一样的数据

select t.code,t.name from table1 t  join table2 t1 on t.code=t1.code and t.name=t1.name

2、用一个not exists关联子查询通过where a.code=t.code and a.name=t.name可以得到表1和上面的结果集不同的地方,就是题主需要的。

都被你描述晕了,实际上就是找A中和B中code相同且name不同的行


select A.* from B, A
where B.code = A.code and B.name !=A.name

img

select A.name,A.code from B, A
where B.code = A.code and B.name !=A.name


SELECT1.name, 表1.code
FROM1
LEFT JOIN 表2 ON1.code = 表2.code 
where1.name !=表2,name

select a.code,a.name from table1 a
where not exists
(select t.code,t.name from table1 t
join table2 t1 on t.code=t1.code and t.name=t1.name
where a.code=t.code and a.name=t.name)
group by a.code,a.name