ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4022112 オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
質問者:yamadandan サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、
SQL>
> select * from テーブルA
> where (key1,key2) in (select key1,key2 from テーブルB)

このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?
困り度:
  • 困っています
質問投稿日時:
08/05/14 17:55
この質問に対する回答は締め切られました。

回答良回答10pt

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

"^"の部分は、キーに出現しない文字列にします。
数値でしたら、
CAST(key1 AS VARCHAR)のように文字列に変換します。
インデックスが使えませんので、テーブルのサイズによっては遅いかも知れませんが。
回答者:masa6272
種類:アドバイス
どんな人:専門家
自信:自信あり
回答日時:
08/05/16 17:44
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答20pt

ANo.1 質問の条件式は、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
回答者:chukenkenkou
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/14 19:46
この回答へのお礼この回答にお礼をつける(質問者のみ)