0

我有 10 个数字字段的表(比方说F1, F2... F10)。

现在我有 4 个数字 ( N1, N2, N3, N4)。

我必须找出这 4 个数字是否出现在上表的任何地方。例如,如果F2=N4F1=N2Fx=N3Fy=N1(任意顺序,任意组合)。

我想知道是否有快速的方法通过 SQL 来完成它,或者它是否是编写 looooong 选择组合的唯一方法(我不确定我是否能够在这辈子中完成它)。

4

2 回答 2

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使用 PIVOT 和 UNPIVOT支持此功能

于 2013-07-09T09:35:43.363 回答
1

这是 SQLFiddel 演示

下面是示例查询

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)
于 2013-07-09T09:38:02.740 回答