表
- 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)为我工作
答案 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建议的比较序列,该序列适用于任何数据库。