我正在执行一个查询,该查询在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中过滤掉它?
答案 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语句的组合来重写,以产生正确的结果。