私はちょうどこれを理解しました。おそらく悪い習慣ですが、この場合はうまくいきました。
私は、すべての列名にテーブル プレフィックスを付けてエイリアスを作成したり、書き出したりしたくない怠け者の 1 人です。
table_name.*
select ステートメントでを使用して、特定のテーブルからすべての列を選択できます。
列名が重複している場合、mysql は最初から最後まで上書きします。最初に複製された列名のデータは、その列名が再び検出されると上書きされます。したがって、最後に来る重複した列名が勝ちます。
それぞれが重複した列名を含む 3 つのテーブルを結合している場合、select ステートメント内のテーブルの順序によって、重複した列に対して取得するデータが決まります。
例:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
dup
上記の例では、 I getの値はfrom になりますtable3
。
dup
からの値になりたい場合はどうすればよいtable1
ですか?
次に、これを行う必要があります。
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
table1
が最後に来るので、 の値はdup
table1 の値になります。
dup
おかしな列をすべて書き出す必要なく、必要な値を取得しましたが、それでもすべての列を操作できます。わーい!
dup
の値が3 つのテーブルすべてで同じであることはわかっていますtable3
が、 に一致する値がない場合はどうなりdup
ますか? 次にdup
、最初の例では空白になり、それは残念なことです。