- - PR -
SQL文で制限条件をjoin句に記述
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-04 10:48
DBはSQLSERVERです。
SQLを書く時に、外部結合するテーブルを制限する時は 1番:
だと思っていたのですが、 2番:
こう書くのが文法的には正しいのでしょうか? 今まで1番が正しい書き方だと思っていたので… 参考にした記事 http://support.microsoft.com/kb/176480/ja 詳しい方、よろしければご教授お願い致します。 | ||||||||||||||||
|
投稿日時: 2007-09-04 11:01
参考にされた記事を見ますと、
が正しいとか正しくないとかではなく、
と
は結果が違いますよ。 と言う内容じゃないでしょうか。
どちらも有りだと思います。 場合によっては1番の書き方もしますし。 例えば、BのテーブルにDISTINCTや集計関数を噛ませたい場合等は1番の記述になりますよね。 [ メッセージ編集済み 編集者: tkrn 編集日時 2007-09-04 11:15 ] | ||||||||||||||||
|
投稿日時: 2007-09-04 11:24
tkrn様 ご指摘ありがとうございます。
参考ページの説明はtkrn様がおっしゃったように 条件をつける時はこうしないと駄目ですよ! ということですね。 ただ、私が気になったのがこのページの最後のSQL文の説明にある >外部結合するテーブルを制限する正しい方法は、 >以下の例のように、FROM 句の ON の部分に >外部結合するテーブルを制限する条件を置くことです。 の部分です。 情報処理技術系ではこの書き方はNGです!と記述したページがあるし マイクロソフトはこれが正しい!と書いてあるので どっちの書き方がいいのか判らなくなったのです。 | ||||||||||||||||
|
投稿日時: 2007-09-04 11:56
>情報処理技術系ではこの書き方はNGです!と記述したページがあるし
これはサイトの情報ですか?本の情報ですか? 詳細を知りたいと思います。 >外部結合するテーブルを制限する正しい方法は、 >以下の例のように、FROM 句の ON の部分に >外部結合するテーブルを制限する条件を置くことです。 「外部」結合するにはONの部分に条件を置くこと以外ないと認識しています。 (oracleの(+)を除く) | ||||||||||||||||
|
投稿日時: 2007-09-04 12:05
これを3番として↓
この正しい方法の意味は、3番が結果として間違っているから 2番が正しいと言う意味じゃないでしょうか?
そうなんですか? Web上で挙がっているなら、参考にそのURLを教えて欲しいです。 私が書くなら、この場合は確かに2番ですけど、1番がNGだと言うほどのものとも思いません。 | ||||||||||||||||
|
投稿日時: 2007-09-04 13:25
KOX様、tkrn様 ご返答ありがとうございます。
tkrn様の書込みより
私の読解力が足りなかったみたいですね。 tkrn様の指摘されたような意味と理解することにします。 KOX様の書込みより
私の勉強不足なのだと思いますが、私の記述した1番のSQLは 外部結合するテーブルを制限していることにはならないということでしょうか?
これは制限条件でググって見つけた別の掲示板なのですが、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1010904660 ここのベストアンサーの方の回答にそのように記述されていたからです。 これが本当なのかわからなかったので、ここで皆さんにご質問させて頂いたのです。 | ||||||||||||||||
|
投稿日時: 2007-09-04 14:45
ANSI標準は詳しくないのでググってみましたが、考え過ぎじゃないでしょうか?
確かにONに結合条件を書きましょう的な事は書かれていますが、それに伴う制限条件は書くなとはどこにも書いてないように思えます。 実際ACCESSでもSQLServerでもOracleでも2番の様な書き方はできますし。 DELKBN=0は制限条件の様に捉えられていますが、解釈によっては結合条件であるようにも取れなくはないでしょうか。 #「IDが一致し、かつBテーブルのDELKBNが0のものを外部結合する」という結合条件 | ||||||||||||||||
|
投稿日時: 2007-09-04 14:56
失礼しました。私の読解力不足です。無視してください。 で本題をしっかり読み直して検証中・・・ tkrnさんがおっしゃっているように、特に問題ないと思いますよ。 役に立ってなくて申し訳ないです。 |