Je viens de trouver ça. C'est probablement une mauvaise pratique mais ça a marché pour moi dans ce cas.
Je fais partie des personnes paresseuses qui ne veulent pas aliaser ou écrire chaque nom de colonne avec un préfixe de table.
Vous pouvez sélectionner toutes les colonnes d'une table spécifique à l'aide de la fonction table_name.*
dans votre déclaration de sélection.
Lorsque vous avez des noms de colonnes dupliqués, mysql les écrase du premier au dernier. Les données du premier nom de colonne dupliqué seront écrasées lorsqu'il rencontrera à nouveau ce nom de colonne. Ainsi, le nom de colonne dupliqué qui arrive en dernier gagne.
Si je joins 3 tables, chacune contenant un nom de colonne dupliqué, l'ordre des tables dans l'instruction select déterminera les données que j'obtiendrai pour la colonne dupliquée.
Exemple :
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
Dans l'exemple ci-dessus, la valeur de dup
que j'obtiendrai sera de table3
.
Et si je veux dup
pour être la valeur de table1
?
Alors je dois faire ça :
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
Maintenant, table1
vient en dernier, donc la valeur de dup
sera la valeur du tableau 1.
J'ai obtenu le prix que je voulais pour dup
sans avoir à écrire chaque colonne et j'ai toujours toutes les colonnes pour travailler. Hourra !
Je connais la valeur de dup
devrait être le même dans les 3 tables, mais que faire si table3
n'a pas de valeur correspondante pour dup
? Alors dup
serait vide dans le premier exemple, et ce serait une déception.