我正在尝试编写一个查询,该查询只需要指定一次数字/值列表,但是请检查它们是否在两列中。这可能吗?

我正在尝试类似的东西:

SELECT date
     , source
     , destination
  FROM cdr
 WHERE ('0400000000', '0411111111', '0422222222') IS IN source OR destination;


我找不到其他东西,最接近的是https://stackoverflow.com/a/1314192/2071729

为了更清楚地说明我的目标,我尝试避免两次出现范围变化,例如:

SELECT date
     , source
     , destination
  from cdr
 WHERE source IN ('0400000000', '0411111111', '0422222222')
    OR destination IN ('0400000000', '0411111111', '0422222222');

最佳答案

试试这个(SQL Fiddle):

select date, source, destination from cdr
where exists (
  select * from (select 0 as n union all select 1) as a
  where case when n = 0 then cdr.source else cdr.destination end
    in ('0400000000', '0411111111', '0422222222')
)


虽然不确定是否会产生最佳的查询计划,但是您必须自己检查一下。

关于mysql - 针对多列选择值范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42570207/

10-12 14:16