where子句中具有多个值的多个列

时间:2013-03-06 14:52:46

标签: teradata

我正在执行一个查询,该查询在where子句中有多个具有多个值的列。我知道在SQL中你可以使用IN条件来满足并获得正确的输出。 teradata的方法是什么?

我在Oracle中的代码如下所示:

select td.country_code,td.phone_num 
from telephone_directory td 
where (td.country_code, td.phone_num) in ((91,1234567890),(44,1020304050),(1,998877446655))

这打印出确切的结果,即3行

我在teradata中的查询看起来像这样

select country_code ,phone_num  
from telephone_directory 
where (country_code in (91, 44, 1) and phone_num in( 1234567890, 1020304050, 998877446655)

然而,这会返回更多行:

country_code  phone_num  
91            1234567890
91            1020304050
44            1020304050
1             998877446655

注意:country_code和phone num的组合不是唯一的。

有没有办法像在ORACLE中那样在teradata中过滤掉它?

3 个答案:

答案 0 :(得分:3)

据我所知,Teradata不支持“扩展”where子句语法,就像在Oracle中一样;您需要将条件指定为复合表达式:

select country_code ,phone_num
from telephone_directory
where (country_code=91 and phone_num=1234567890)
   or (country_code=44 and phone_num=1020304050)
   or (country_code=1  and phone_num=998877446655)

答案 1 :(得分:2)

select USER_TYPE,USER_ID
from USER_TABLE
where (USER_TYPE || USER_ID) in (('F6713'),('S1178'),('M5715'),('F8341'),('F1284'))

答案 2 :(得分:1)

逻辑上,您看到的Teradata结果是正确的。您有一个包含多个国家/地区代码的电话号码以下SQL应该产生您希望看到的结果:

select td.country_code,td.phone_num 
from telephone_directory td 
where (td.country_code, td.phone_num) 
   in ( SELECT 91 AS country_code_
             , 1234567890 AS phone_num_
         UNION 
        SELECT 44 AS country_code_
             , 1020304050 as phone_num_
         UNION
        SELECT 1 as country_code_
             , 998877446655 as phone_num_
      );

这也可以使用WITH子句或与括号组合在一起的AND语句的组合来重写,以产生正确的结果。