求一个SQL查询语句,比刚才的要难一点

dengpeng_b 2012-04-25 11:00:59
还是有两个表,分别为表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字段任意三个同时相同
...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
urandbong 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

不懂:得出的结果其中一条4,7,3,2这四个数字任意三个能在表B在找到?473,表B明显没有4啊,能说说473是怎么在表B在匹配的么?
[/Quote]

楼主是说a表中任意三个字段的值出现在b表中就选出来
dengpeng_b 2012-04-26
  • 打赏
  • 举报
回复
三楼的正解,已验证通过!
非常感谢唐诗三百首,给我解决了大问题!
thanks!!
幽水-椰子糖 2012-04-26
  • 打赏
  • 举报
回复
不懂:得出的结果其中一条4,7,3,2这四个数字任意三个能在表B在找到?473,表B明显没有4啊,能说说473是怎么在表B在匹配的么?
facome 2012-04-26
  • 打赏
  • 举报
回复
给力啊
dengpeng_b 2012-04-25
  • 打赏
  • 举报
回复
是不是只需要这一段就行了
select distinct a.*
from 表A a
cross join 表B b
where
(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

前面的建表语句不用了吧 ,因为我的表是现成的,
我验证后没问题就给分啊!
唐诗三百首 2012-04-25
  • 打赏
  • 举报
回复

create table 表A
(序号 int, A1 int, B1 int, C1 int, D1 int)

insert into 表A
select 1, 1, 3, 5, 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

create table 表B
(日期 varchar(4), A1 int, B1 int, C1 int, D1 int)

insert into 表B
select '06', 2, 3, 5, 7 union all
select '09', 7, 2, 8, 3 union all
select '11', 8, 2, 7, 5 union all
select '12', 3, 1, 6, 5


select distinct a.*
from 表A a
cross join 表B b
where
(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)
dengpeng_b 2012-04-25
  • 打赏
  • 举报
回复
是的,四个字段的值可以是无序的,如果能够两表的A1对A1比较,B1对B1比较...这样比较就好办了
问题是A1和B1相同 或 A1和C1相同都算有一个相同,这样比较就不好办
-狙击手- 2012-04-25
  • 打赏
  • 举报
回复
你列比较是无序的?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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