求一个SQL 语句,应该要用到EXISTS

yilin54 2011-12-13 07:18:14
表A
学号 分数
001 90
002 80
003 70
004 89

表B
学号 分数
001 90
002 90

想把A表中和B表分数不相同,A表中有,B表中没有的都查询出来,预想结果
学号 分数A 分数B
002 80 90
003 70 NULL
004 89 NULL
该如何写好?
...全文
74 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
苦苦的潜行者 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yilin54 的回复:]

我想问下这里的
SELECT ISNULL(a.学号,b.学号) AS 学号,a.分数,b.分数
FROM @表A AS a
FULL JOIN
@表B AS b ON a.学号=b.学号
WHERE NULLIF(a.分数,b.分数) IS NOT NULL
能如果改成AND,为什么结果会不对呀?


引用 2 楼 roy_88 的回复:
這應該用full join
……
[/Quote]

join中on与where的区别
yilin54 2011-12-14
  • 打赏
  • 举报
回复
我想问下这里的
SELECT ISNULL(a.学号,b.学号) AS 学号,a.分数,b.分数
FROM @表A AS a
FULL JOIN
@表B AS b ON a.学号=b.学号
WHERE NULLIF(a.分数,b.分数) IS NOT NULL
能如果改成AND,为什么结果会不对呀?


[Quote=引用 2 楼 roy_88 的回复:]
這應該用full join

借用葉子兄弟數據


SQL code
declare @表A table (学号 varchar(3),分数 int)
insert into @表A
select '001',90 union all
select '002',80 union all
select '003',70 union all
select '004',89

……
[/Quote]
--小F-- 2011-12-13
  • 打赏
  • 举报
回复
select * from a where not exists(select 1 from b where  a.[学号]=[学号] and a.[分数]=[分数])
union all
select * from b where not exists(select 1 from a where [学号]=b.[学号] and [分数]=b.[分数])
wyl1108 2011-12-13
  • 打赏
  • 举报
回复
A表中 有,B表中没有的查出来 可以用 except 关键字

select * from A
except
select * from B
中国风 2011-12-13
  • 打赏
  • 举报
回复
有可能存在B表有,A表沒有/A表有,B表沒有

苦苦的潜行者 2011-12-13
  • 打赏
  • 举报
回复
create table a([学号] varchar(10),[分数] int)
insert a
select '001' ,90 union all
select '002', 80 union all
select '003' ,70 union all
select '004' ,89

create table b([学号] varchar(10),[分数] int)
insert b
select '001', 90 union all
select '002', 90

go
select o.[学号],o.[分数],u.[分数] from
(
select a.[学号],a.[分数] from a
where not exists (select 1 from b where a.[学号]=b.[学号] and a.[分数]=b.[分数])
) as o
left join b as u on o.[学号]=u.[学号]
/*

(所影响的行数为 3 行)
学号 分数 分数
--- --- ----
002 80 90
003 70 NULL
004 89 NULL
*/
go
drop table a,b
中国风 2011-12-13
  • 打赏
  • 举报
回复
這應該用full join

借用葉子兄弟數據

declare @表A table (学号 varchar(3),分数 int)
insert into @表A
select '001',90 union all
select '002',80 union all
select '003',70 union all
select '004',89

declare @表B table (学号 varchar(3),分数 int)
insert into @表B
select '001',90 union all
select '002',90


SELECT ISNULL(a.学号,b.学号) AS 学号,a.分数,b.分数
FROM @表A AS a
FULL JOIN
@表B AS b ON a.学号=b.学号
WHERE NULLIF(a.分数,b.分数) IS NOT NULL

/*
学号 分数 分数
002 80 90
003 70 NULL
004 89 NULL
*/
叶子 2011-12-13
  • 打赏
  • 举报
回复

declare @表A table (学号 varchar(3),分数 int)
insert into @表A
select '001',90 union all
select '002',80 union all
select '003',70 union all
select '004',89

declare @表B table (学号 varchar(3),分数 int)
insert into @表B
select '001',90 union all
select '002',90

select a.学号 ,
a.分数 as 分数a ,
b.分数 as 分数b
from @表a a
left join @表b b on a.学号 = b.学号
where isnull(a.分数, 0) <> isnull(b.分数, 0)
/*
学号 分数a 分数b
---- ----------- -----------
002 80 90
003 70 NULL
004 89 NULL
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧