SQL - 列表列表中的(value1,value2)

时间:2015-10-27 12:05:33

标签: sql

- id, :x,y
 - 1   : 1    1
 - 2   : 1   2
 - 3   : 1   3
 - 4   : 2   1
 - 5   : 2   2
 - 6   : 2   2

我想从列表的输入列表中选择id((1,1),(1,3),(2,2),...)

(实际上是一个更大的列表(〜(14k列的(x,y)对))

预期结果:id-s:1,3,5

我尝试了不好的解决方案:"其中x在(1,2)和y在(1,2,3)"

返回所有6行

欢迎任何帮助。第一个问题,欢迎反馈。

Edit1:列表和数据要大得多。做得更小,更容易解释自己

Edit2:((1,2),....)中的(x,y)为我工作

1 个答案:

答案 0 :(得分:2)

在优化方面,通常最好将"常数放在"在临时表中列出并使用连接。在许多数据库中,这看起来像:

select t.*
from table t join
     (select 1 as x, 1 as y union all select 1, 3 union all select 2, 2
     ) list
     on t.x = list.x and t.y = list.y;

数据库优化器通常在连接上比在复杂的where子句上更好。

某些数据库也会支持where这样的子句:

where (x, y) in ((1, 1), (1, 3), (2, 2))

当然,您可以随时使用Juergen建议的比较序列,该序列适用于任何数据库。