プロが教える店舗&オフィスのセキュリティ対策術

サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、
SQL>
> select * from テーブルA
> where (key1,key2) in (select key1,key2 from テーブルB)

このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?

A 回答 (2件)

質問の条件式は、SQL92で規定された行値構成子(または行値式)と呼ばれます。


主要なRDBMSでは実装されていますが、SQL Serverは、なぜかSQL Server 2005でも実装されていません。
SQL Serverで実行する場合は、書き換えが必要です。

<書き換え例1>
select * from tblA
where exists
(select 1 from tblB
where tblA.key1=key1 and tblA.key2=key2)

<書き換え例2>
select distinct tblA.* from tblA
inner join tblB
on tblA.key1=tblB.key1 and tblA.key2=tblB.key2
    • good
    • 4

key1、key2が文字の場合、こんなのも可能です。


SELECT * FROM tblA
WHERE key1 + "^" + key2 in (SELECT key1 + "^" + key2 FROM tblB)

"^"の部分は、キーに出現しない文字列にします。
数値でしたら、
CAST(key1 AS VARCHAR)のように文字列に変換します。
インデックスが使えませんので、テーブルのサイズによっては遅いかも知れませんが。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A