Я только что понял это. Вероятно, это плохая практика, но в этом случае она сработала.
Я один из ленивых людей, которые не хотят создавать псевдонимы или записывать каждое имя столбца с префиксом таблицы.
Вы можете выбрать все столбцы из определенной таблицы, используя table_name.*
в своем операторе выбора.
Если у вас есть дублированные имена столбцов, mysql будет перезаписывать от первого до последнего. Данные из первого дублированного имени столбца будут перезаписаны при повторном обнаружении этого имени столбца. Таким образом, повторяющееся имя столбца, которое появляется в последнем, выигрывает.
Если я присоединяюсь к 3 таблицам, каждая из которых содержит дублированное имя столбца, порядок таблиц в операторе выбора будет определять, какие данные я получаю для дублирующего столбца.
Пример:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
В приведенном выше примере значение dup
, которое я получу, будет от 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
будет значением из таблицы 1.
Я получил желаемое значение для dup
без необходимости записывать каждый отдельный столбец, и я все еще заставляю работать со всеми столбцами. Ура!
Я знаю, что значение dup
должно быть одинаковым во всех 3 таблицах, но что если table3
не имеет соответствующего значения для dup
? Тогда dup
будет пустым в первом примере, и это будет облом.