日期:2014-05-18  浏览次数:20467 次

一个简单的SQL查询语句,看谁能捡这个便宜分!
有两个表,分别为表A,表B

表A字段及内容:

序号 A1 B1 C1 D1
1 1 2 6 7
2 4 7 3 2
3 0 9 2 1
4 1 2 3 4
........

表B字段及内容:

日期 A1 B1 C1 D1
06 5 2 4 7
09 1 2 3 8
11 8 2 7 2
12 3 1 6 5
........

我现在想在表A中查询满足如下条件的记录
表A的A1=表B的A1 且 表A的 A2=表B的A2 且 表A的 A3=表B的A3,其它字段可以不相同

以本例那么上面查出的结果就应该为
序号 A1 B1 C1 D1
4 1 2 3 4

因为在表A中只有这一条的A1,B1,C1和表B的这三个字段相同

------解决方案--------------------
select *
from ta a 
where exists(select 1 from tb where a.a1 = a1 and a.a2 = a2 and a.a3 = a3)
------解决方案--------------------
SQL code

if object_id('[A]') is not null drop table [A]
go
create table [A]([序号] int,[A1] int,[B1] int,[C1] int,[D1] int)
insert [A]
select 1,1,2,6,7 union all
select 2,4,7,3,2 union all
select 3,0,9,2,1 union all
select 4,1,2,3,4
go
if object_id('[B]') is not null drop table [B]
go
create table [B]([日期] varchar(2),[A1] int,[B1] int,[C1] int,[D1] int)
insert [B]
select '06',5,2,4,7 union all
select '09',1,2,3,8 union all
select '11',8,2,7,2 union all
select '12',3,1,6,5
go

SELECT *
  FROM A 
WHERE EXISTS(SELECT 1 FROM B WHERE A1=A.A1 AND B1=A.B1 AND C1=A.C1)

/**
序号          A1          B1          C1          D1
----------- ----------- ----------- ----------- -----------
4           1           2           3           4

(1 行受影响)
**/