我试图写一个查询,我只需要指定一个数字/值列表,但检查它们是否在两列之一。这可能吗?
我基本上尝试过类似的事情:
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');
答案 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和 等等......