针对多个列选择值范围

时间:2017-03-03 03:39:06

标签: mysql sql

我试图写一个查询,我只需要指定一个数字/值列表,但检查它们是否在两列之一。这可能吗?

我基本上尝试过类似的事情:

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

我无法在其上找到任何其他内容,我找到的最近的是live preview - ideone.com

为了更清楚我的目标,我试图避免让他们的两次范围,例如:

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

3 个答案:

答案 0 :(得分:0)

如果您的列表太大,则无法将其指定两次,您可以将数据放入临时表

Create temporary table myvals ( vals varchar(20) not null );

/*  Inserts to populate the temp table */

SELECT date, source, destination 
FROM cdr 
WHERE source in (select val from myvals) 
     destination in (select val from myvals);

答案 1 :(得分:0)

试试这个(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')
)

不确定这是否会产生最佳查询计划...您必须自己检查。

答案 2 :(得分:-1)

你不能像这样使用WHERE('0400000000','0411111111','0422222222')

  

而不是你必须使用column1 = 00000和column2 = 11111和   等等......