Я просто зрозумів це. Це, мабуть, погана практика, але в цьому випадку це спрацювало для мене.
Я один з ледачих людей, які не хочуть створювати псевдоніми або виписувати кожну назву стовпця префіксом таблиці.
Ви можете вибрати всі стовпці з певної таблиці, використовуючи 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
я отримую, буде від 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
в першому прикладі буде порожнім, і це буде облом.