求一个SQL查询语句,比刚才的要难一点
还是有两个表,分别为表A,表B
表A字段及内容:
序号 A1 B1 C1 D1
1 1 3 5 7
2 4 7 3 2
3 0 9 2 1
4 1 2 3 4
........
表B字段及内容:
日期 A1 B1 C1 D1
06 2 3 5 7
09 7 2 8 3
11 8 2 7 5
12 3 1 6 5
........
我现在想在表A中查询满足如下条件的记录
表A的字段A1,B1,C1,D1中任意三个字段的值要和表B的字段A1,B1,C1,D1中任意三个字段的值相同
以本例那么上面查出的结果就应该为
序号 A1 B1 C1 D1
1 1 3 5 7
2 4 7 3 2
因为在表A中只有这两条的A1,B1,C1,D4字段中有任意三个和表B的中A1,B1,C1,D4字段任意三个同时相同
[解决办法]
- SQL code
create table 表A(序号 int, A1 int, B1 int, C1 int, D1 int)insert into 表Aselect 1, 1, 3, 5, 7 union allselect 2, 4, 7, 3, 2 union allselect 3, 0, 9, 2, 1 union allselect 4, 1, 2, 3, 4create table 表B(日期 varchar(4), A1 int, B1 int, C1 int, D1 int)insert into 表Bselect '06', 2, 3, 5, 7 union allselect '09', 7, 2, 8, 3 union allselect '11', 8, 2, 7, 5 union allselect '12', 3, 1, 6, 5select distinct a.* from 表A across join 表B bwhere (case when a.A1 in (b.A1,b.B1,b.C1,b.D1) then 1 else 0 end+case when a.B1 in (b.A1,b.B1,b.C1,b.D1) then 1 else 0 end+case when a.C1 in (b.A1,b.B1,b.C1,b.D1) then 1 else 0 end+case when a.D1 in (b.A1,b.B1,b.C1,b.D1) then 1 else 0 end)>=3序号 A1 B1 C1 D1----------- ----------- ----------- ----------- ----------- 1 1 3 5 7 2 4 7 3 2(2 row(s) affected)