【发布时间】:2015-04-23 04:54:06
【问题描述】:
我正在执行一个查询,该查询在 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 和电话号码的组合不是唯一的。
有没有办法像 ORACLE 那样在 teradata 中过滤掉它?
【问题讨论】:
-
顶部查询使用“成对比较子查询”(来源:2007 Oracle SQL 类幻灯片)。这意味着这两个值必须存在于同一行中。第二个查询是非成对比较,两个值可以彼此存在于不同的行中。由于 Teradata 无法进行成对比较,最好的答案可能是下面显示的将值连接成组合键的答案。
标签: teradata