- - PR -
SQLの構文
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-18 10:16
毎度。
SQLServerのView(SQL)で教えて下さい。 あるテーブルAがあり、X・Y・Zの3列で構成されているとします。 この時、列Yの値が、、、 ”1”の時、テーブルBと、列Zの値をキーとしてLeftJoinする。 ”2”の時、テーブルCと、列Zの値をキーとしてLeftJoinする。 ”3”の時、テーブルDと、列Zの値をキーとしてLeftJoinする。 といったことをView(SQL)で表現することは可能でしょうか? よろしくお願いします。 追伸)SQLServer2003です。 |
|
投稿日時: 2005-08-18 10:38
こんにちは。
テーブルAのY列を条件としてWhere句に書いた3つのSQLを、 UNIONで繋げればOKだと思います。 カラムを合わせることに注意して下さい。 [ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-18 10:39 ] あ、NAOさんがこのスレageておいてくれてますね。 参考になるので、ぜひご一読下さい。 UNIONの詳しい使い方は、 えんぞ@?さんの書かれているリンクから、 @ITデータベース入門→SQL実践講座→第9回 SELECT文を統合するUNION を辿って参照して下さい。 [ メッセージ編集済み 編集者: でっち6号 編集日時 2005-08-18 11:32 ] |
|
投稿日時: 2005-09-05 15:44
case式による多分岐を使用すればいいかと思われます
くわしくはこちらを参照して下さい http://oraclesqlpuzzle.hp.infoseek.co.jp/4-5.html [ メッセージ編集済み 編集者: 重蔵 編集日時 2005-09-05 16:39 ] [ メッセージ編集済み 編集者: 重蔵 編集日時 2005-09-22 10:50 ] |
|
投稿日時: 2005-09-05 19:37
もしかしたら、とんでもない勘違いをしているかもしれないので、その場合はお許し下さい。
どの方法(case, decode, union)を使ったとしても、例えばY=1の時次のSELECT結果が複数行になった場合、うまくいきますか? (select b.val1 from テーブルB b where b.Z=a.Z) これらの方法は、以下のように「UNIQUE列」という追加条件がある場合にだけ使えるように思います。 ”1”の時、テーブルB のUNIQUE列 と、列Zの値をキーとしてLeftJoinする。 ”2”の時、テーブルC のUNIQUE列 と、列Zの値をキーとしてLeftJoinする。 ”3”の時、テーブルD のUNIQUE列 と、列Zの値をキーとしてLeftJoinする。 |
|
投稿日時: 2005-09-05 20:10
多分、どの方法を使った場合でも単一値を返すサブクエリを使うわけでもないため、特に uniqueness は不要だと思います。
|
|
投稿日時: 2005-09-06 11:42
スカラー問い合わせで2行返すとエラーとなるため
caseとdecodeは1対1もしくは、多対1の場合にしか使えません unionは1対1、1対多、多対1、多対多いずれの場合でも使えます [ メッセージ編集済み 編集者: 重蔵 編集日時 2005-09-06 13:08 ] |
|
投稿日時: 2005-09-06 12:45
left join の条件にcase あるいは decode をつかうのでは?
|
|
投稿日時: 2005-09-06 21:48
重蔵さん、
> くわしくはこちらを参照して下さい > http://oraclesqlpuzzle.hp.infoseek.co.jp/4-6.html を参照するとUNIONの場合も、 select Y,Z, (select b.val1 from テーブルB b where b.Z = a.Z) as val1 from テーブルA a where Y=1 union ....... ....... とスカラー問い合わせを使っているので、1対1もしくは、多対1の場合にしか使えないのではないでしょうか? |