1

全て、

私はいくつかの基本的なMySQLJOINチュートリアルをレビューしています。ジェフ・アトウッドは彼のブログで次のような例を示しています。

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

TableBクエリは、セマンティックの観点から、2行目の言及を必要としないように思われます。私はそれを正しく理解していますか?すべての情報はすでに3行目で利用可能であるように私には思えます。

私はSQL言語の効率についてどんな種類の問題も引き起こそうとはしていませんTableB。この文脈で、または他の文脈で、この言及が新しい情報をもたらすかどうかを理解したいだけです。

4

2 に答える 2

2

TableB結合している列には一意の名前が付けられていないため、は3行目にのみ表示されます。

たとえば、列とに参加したいTableAとします。ここでは、と呼ばれるciolumnのみがあり、。という名前の列のみがあります。次に、これを書くことができます:TableBFooBarTableAFooTableBBar

SELECT * FROM TableA 
  LEFT OUTER JOIN TableB 
  ON Foo = Bar
于 2012-04-11T22:53:34.630 に答える
2

新しい情報は提供されませんが、テーブルのエイリアスを作成するための精度と機能が提供されます。

SELECT a.* FROM TableA a
LEFT OUTER JOIN TableBWhichHasAReallyLongUnweildyName b
ON a.name = b.name

この定式化では、aからのデータを明示的に要求し、3行目で結合をより簡単に把握できることに注意してください。ただし、コンパイラーには、使用するテーブルの情報をどこで取得するかについての任意のガイダンスはありません。明示的に宣言しない限り。これがSQLの動作方法であるかどうかを検討してください。

SELECT b.* FROM TableA a
LEFT OUTER JOIN 
ON TableA.name = TableB.name b
WHERE TableB.value v > 1

tableBのエイリアスは「b」ですか、それともTableB.nameのエイリアスは「b」ですか?紛らわしいです。明示的で信頼できる方がよい。

于 2012-04-11T22:53:58.633 に答える