我有 10 个数字字段的表(比方说F1, F2... F10
)。
现在我有 4 个数字 ( N1, N2, N3, N4
)。
我必须找出这 4 个数字是否出现在上表的任何地方。例如,如果F2=N4且F1=N2且Fx=N3且Fy=N1(任意顺序,任意组合)。
我想知道是否有快速的方法通过 SQL 来完成它,或者它是否是编写 looooong 选择组合的唯一方法(我不确定我是否能够在这辈子中完成它)。
我有 10 个数字字段的表(比方说F1, F2... F10
)。
现在我有 4 个数字 ( N1, N2, N3, N4
)。
我必须找出这 4 个数字是否出现在上表的任何地方。例如,如果F2=N4且F1=N2且Fx=N3且Fy=N1(任意顺序,任意组合)。
我想知道是否有快速的方法通过 SQL 来完成它,或者它是否是编写 looooong 选择组合的唯一方法(我不确定我是否能够在这辈子中完成它)。
一种方法(如果您的数据库支持)是旋转数据,以便 10 列中的每一列都有自己的行。
所以
ID F1 F2 F3 .. Fn
1 1 2 3 10
变成
ID F
1 1
1 2
1 3
..
1 10
您现在可以针对单个列查询 F 的给定值是否存在,这在一定程度上简化了事情。
SQL Server使用 PIVOT 和 UNPIVOT支持此功能
下面是示例查询
select * from Temp
where 'N1' in (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10)
and 'N2' in (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10)
and 'N3' in (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10)
and 'N4' in (F1,F2,F3,F4,F5,F6,F7,F8,F9,F10)