• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

问一条SQl语句

Magicwords 2010-06-04 05:30:29
表TA

编号 名称 状态
----------------------------------
1000 1000 0
1001 1001 0
1002 1002 1
1003 1003 1
1004 1004 1
1005 1005 1


表TB
编号 名称 状态
----------------------------------
1000 1000 1
1001 1001 0
1003 1003 0
1005 1005 1

查询出表A中有,且状态与表B不相等的记录(表TA中有,表TB中没有的记录也要查出来)
查询出来的结果如下

编号 名称
---------------------
1000 1000
1002 1002
1003 1003
1004 1004
...全文
47 点赞 收藏 8
写回复
8 条回复
幸运的意外 2010年06月04日
SELCT
A.编号,A.名称
FROM
[TA] A
LEFT OUTER JOIN
[TB] B
ON
A.编号 = B.编号
AND
A.名称 = B.名称
AND
A.状态 <> B.状态
WHERE
B.状态 IS NULL
楼主,掉了一个条件,不好意思。
回复 点赞
幸运的意外 2010年06月04日
SELCT
A.编号,A.名称
FROM
表A A
LEFT OUTER JOIN
表B B
ON
A.编号 = B.编号
AND
A.名称 = B.名称
AND
A.状态 <> B.状态
回复 点赞
--小F-- 2010年06月04日
全部被写完了
回复 点赞
htl258_Tony 2010年06月04日
-->SQL2K的另一方法:
SELECT *
FROM [TA]
WHERE CHECKSUM(*)
NOT IN (
SELECT CHECKSUM(*)
FROM [TB]
)
/*
编号 名称 状态
----------- ----------- -----------
1000 1000 0
1002 1002 1
1003 1003 1
1004 1004 1

(4 行受影响)
*/
回复 点赞
永生天地 2010年06月04日

select a.* from TA a left join TB b on a.编号=b.编号
where b.编号 is null or a.状态<>b.状态

/*
编号 名称 状态
----------- ----------- -----------
1000 1000 0
1002 1002 1
1003 1003 1
1004 1004 1

(所影响的行数为 4 行)
*/
回复 点赞
pt1314917 2010年06月04日
select * from [TA] a where not exists
(select 1 from tb where 编号=a.编号 and 状态=a.状态D)
回复 点赞
htl258_Tony 2010年06月04日
--> 生成测试数据表: [TA]
IF OBJECT_ID('[TA]') IS NOT NULL
DROP TABLE [TA]
GO
CREATE TABLE [TA] ([编号] [int],[名称] [int],[状态] [int])
INSERT INTO [TA]
SELECT '1000','1000','0' UNION ALL
SELECT '1001','1001','0' UNION ALL
SELECT '1002','1002','1' UNION ALL
SELECT '1003','1003','1' UNION ALL
SELECT '1004','1004','1' UNION ALL
SELECT '1005','1005','1'

--> 生成测试数据表: [TB]
IF OBJECT_ID('[TB]') IS NOT NULL
DROP TABLE [TB]
GO
CREATE TABLE [TB] ([编号] [int],[名称] [int],[状态] [int])
INSERT INTO [TB]
SELECT '1000','1000','1' UNION ALL
SELECT '1001','1001','0' UNION ALL
SELECT '1003','1003','0' UNION ALL
SELECT '1005','1005','1'


-->SQL查询如下:
SELECT * FROM [TA]
EXCEPT
SELECT * FROM [TB]
/*
编号 名称 状态
----------- ----------- -----------
1000 1000 0
1002 1002 1
1003 1003 1
1004 1004 1

(4 行受影响)
*/
回复 点赞
xuam 2010年06月04日
select 编号, 名称 from TA where not exists (select a.* from TA a ,TB b where a.编号=b.编号 and a.状态 =b.状态)
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告