4

複数の値を持つ 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 でそれを除外する方法はありますか?

4

3 に答える 3

3
select USER_TYPE,USER_ID
from USER_TABLE
where (USER_TYPE || USER_ID) in (('F6713'),('S1178'),('M5715'),('F8341'),('F1284'))
于 2015-04-22T17:20:13.550 に答える
3

私の知る限り、Teradata は Oracle で可能な「拡張された」where 句の構文をサポートしていません。条件を複合式として指定する必要があります。

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)
于 2013-03-06T21:38:36.603 に答える
2

論理的には、表示されている Teradata の結果は正しいものです。複数の国コードを持つ 1 つの電話番号があります。次の 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 ステートメントの組み合わせを使用して書き直すこともできます。

于 2013-03-06T15:01:54.300 に答える