私は、このクエリで自然結合操作の結果にエイリアスを与えることをMySQLに要求しないことに気づきました: SELECT * FROM TABLE1 NATURAL JOIN TABLE2
、 しかし、派生テーブルではないためエイリアスが必要ですか? これは本当にこの質問へのフォローアップの質問です:Every derived table must have its own alias - when is something a derived table?、と私は、そこには、クエリのFROM部分の '新しい'テーブルは、テーブルを派生され、そのような別名が必要と言われました。 実際にエイリアスが必要ない場合は、この新しいテーブルを次のようなサブクエリでどのように参照しますか:SELECT * FROM TABLE1 NATURAL JOIN TABLE2 WHERE NOT EXISTS (SELECT * FROM TABLE1 WHERE attribute1='thenewtable'.attribute2)
?自然な結合の結果として表の名前は何ですか?
1
A
答えて
1
まず、NATURAL JOIN
を使用しないでください。それは起こるのを待っているバグです。
なぜですか?これは、同じという名前を使用してテーブルを結合するだけなので、列の名前はです。たとえば、私は多くの場合、すべてのテーブルにCreatedAt
というカラムを持っていますが、これをジョインに使用することは決してありません。 USING
節を代わりに使用する方が、明示的に使用されている列がリストされているので、はるかに好ましいことです。
NATURAL JOIN
が明示的に定義された外部キー関係を使用していた場合、私はそれについてより気分が良いことに注意してください。しかし、明示的に定義された外部キーの関係は無視されます。
いずれの場合でも、質問に対する回答は、クエリで定義されているテーブルの別名を使用してテーブルの列を参照できるということです。だから、あなたが書くことができます。この場合
select table1.col1, table2.col2
from table1 natural join
table2;
をテーブル名は、独自のエイリアス(私は通常、t1
やt2
としてテーブル略語です明示的な別名を使用します)です。
派生テーブルの引用は、別名を必要とするFROM
句のサブクエリに関するものです。クエリのFROM
句にサブクエリはありません。
NATURAL JOIN
のSELECT *
の利点は、重複する列名を削除することです。しかし、私はこれがその構文を使う良い理由だとは思わない。
関連する問題
- 1. 列の結果を行の結果として表示する
- 2. SQL結合と左外部結合:なぜ結果は異なりますか?
- 3. 行ではなく列として複数の結果を結合する
- 4. 合成結果の "ゲートカウント"とは何ですか?
- 5. 結果の名前を変更する
- 6. Lucene結果とEntity Frameworkの結果の結合?
- 7. 異なる名前の列にテーブルを結合しても、結果に単一の列が生成される
- 8. サブクエリの結果をテキストとして結合する
- 9. 名前でパスと値渡しの結果
- 10. jQueryのモバイルナビゲーションバー結合結果
- 11. MySQL Left Outer Joinと結果の結合
- 12. Mysqlはさらに、結合結果の結合フィールドを使用して結合します。
- 13. decltype( "Hello")の結果は何ですか?
- 14. 名前付きスコープは、結合テーブルの最初の結果のみを検索します
- 15. display dql twigで結合した結果
- 16. 名前で渡し、値渡しの結果言語で
- 17. C#で匿名の非結合ブロックの値は何ですか?
- 18. nHibernateという名前のクエリがすべての結果を返さない
- 19. ActiveRecordの結果をselect_allの結果と列で結合する方法はありますか?
- 20. Googleマップオートコンプリート、表示結果の前にフック
- 21. webkit-font-smoothing:突然クロームとサファリの結果が異なる
- 22. 同じユーザ名で結果を表示
- 23. foreachループの結果を結合する
- 24. 2つの結果を結合する
- 25. MySQLの結果チェックはオフです...ベストメソッドとは何ですか?
- 26. ハッシュ結合とマージ結合(Oracle RDBMS)の違いは何ですか?
- 27. MySQLは同じスキームテーブルのUNIONの結果を結合します
- 28. MySqlクエリは2つのテーブルの結果を結合します
- 29. 名前/値のないWCF Jsonの結果
- 30. Sql Serverストアドプロシージャの結果セットの結合
いいえそれは 'SELECT 1'と' SELECT * FROM(SELECT 1) 'の違いです、例えば – Strawberry
選択クエリのレコードセットは新しいテーブルではありません。クエリに結合があるかどうかは関係ありません。あなたが試しているように見える限り、単純なwhere節(where attribute1 <> attribute2')を単純に使うことができます。 –
多分興味深い?それは「自然な結合」が「あまり良くない」ことが分かります。私はupvotedコメントのいくつかを読むことをお勧めします。 - [自然結合と内部結合の違い](http://stackoverflow.com/questions/8696383/difference-between-natural-join-and-inner-join) –