質問 |
||
| 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 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |