みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?

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

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

投稿日時 - 2008-05-14 17:55:18

QNo.4022112

困ってます

質問者が選んだベストアンサー

質問の条件式は、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

投稿日時 - 2008-05-14 19:46:50

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

key1、key2が文字の場合、こんなのも可能です。
SELECT * FROM tblA
WHERE key1 + "^" + key2 in (SELECT key1 + "^" + key2 FROM tblB)

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

投稿日時 - 2008-05-16 17:44:03

あなたにオススメの質問