我有10个数字字段的表(比方说F1, F2... F10
)。
现在我有4个号码(N1, N2, N3, N4
)。
我必须找到这4个数字是否出现在上表中的任何位置。例如,如果 F2 = N4 且 F1 = N2 且 Fx = N3 且 Fy = N1 (任何订单) ,任何组合)。
我想知道是否可以通过SQL快速完成此操作,或者只是编写looooong组合选择的唯一方法(我不确定在这一生中我是否能够完成它)。
答案 0 :(得分:1)
执行此操作的一种方法(如果您的数据库支持它)将是数据透视,以便10列中的每一列都有自己的行。
所以
ID F1 F2 F3 .. Fn
1 1 2 3 10
变为
ID F
1 1
1 2
1 3
..
1 10
现在,您可以针对单个列查询给定F值的存在,这有点简化了事情。
SQL Server支持此功能Using PIVOT and UNPIVOT
答案 1 :(得分:1)
<强> Here is SQLFiddel Demo 强>
以下是示例查询
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)