【问题标题】:SQL - where (value1,value2) in list of listsSQL - 列表列表中的 (value1,value2) 位置
【发布时间】:2015-10-27 12:05:33
【问题描述】:

表格

- 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) 对我有用

【问题讨论】:

  • 你用的是什么数据库?
  • 欢迎来到 Stack Overflow。表明您的问题已解决的方法是接受一个答案(通过选择解决您的问题的答案左侧的复选标记按钮),不是通过编辑您的问题的标题。见what should I do when someone answers my question?
  • 知道了,达米安。干杯

标签: sql


【解决方案1】:

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

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 建议的比较顺序,它适用于任何数据库。

【讨论】:

  • 谢谢! where (x, y) in ((1, 1), (1, 3), (2, 2)) 对我有用
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多