Właśnie zorientowaliśmy na zewnątrz. to chyba złą praktyką, ale pracował dla mnie w tej sprawie.
Jestem jednym z tych leniwych, którzy nie chcą alias lub wypisać każdą nazwę kolumny z przedrostkiem tabeli.
Ty można wybrać wszystkie kolumny z określonej tabeli, używając table_name.*
w instrukcji select.
Gdy już duplikowane nazwy kolumn, będzie mysql nadpisać od pierwszego do ostatniego. Dane z pierwszej zduplikowanej nazwy kolumny zostaną nadpisane, gdy ponownie napotkają tę nazwę kolumny. Tak więc nazwa zduplikowanej kolumny, która pojawia się w ostatnim, wygrywa.
Jeśli jestem łączenia 3 tabel, z których każda zawiera powtórzoną nazwą kolumny, kolejność tabel w select określi jakie dane Dostaję dla duplikatu kolumnie.
przykład:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
W powyższym przykładzie wartość dup
uzyskać będzie od table3
.
Co jeśli chcę, aby dup
była wartością z table1
?
Potem muszę to zrobić:
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
Teraz table1
jest ostatni, więc wartość dup
będzie wartość od tabela1.
mam wartość chciałem dla dup
bez konieczności pisania na każdą kolumnę pojedynczą niecodzienna, a ja wciąż dostać wszystkie kolumny pracować. Yay!
Wiem, że wartość dup
powinna być taka sama we wszystkich 3 tabelach, ale co, jeśli table3
nie ma pasującej wartości dla dup
? Wtedy dup
byłaby pusta w pierwszym przykładzie, a to byłby bummer.
Ta odpowiedź spowodowała, że odpowiedzi na http://stackoverflow.com/questions/9233387/sql-should-i-used-a-join pracę dla mnie, dziękuję! – AVProgrammer
Główną wadą tego podejścia jest to, że w przeciwieństwie do 'SELECT *' zapytanie jest ściśle powiązane ze strukturą tabeli. Oznacza to, że po dodaniu/usunięciu/zmianie nazwy kolumn w schemacie należy odpowiednio zmienić zapytanie. –
@RonInbar. 'SELECT *' to koszmar utrzymania w dużych systemach. Sugerujesz, że dodanie kolumny jest proste i nie wymaga żadnych zmian w SQL, jeśli używasz 'SELECT *', ale tak nie jest, jak w omawianym tu przypadku aliasingu. Może również nadać niepotrzebny wpływ na wydajność, jeśli nowe pole jest duże. Może również złamać kontrolki po stronie klienta, które oczekują określonej liczby lub pól. Mogę iść dalej, ale korzyści z "SELECT *" bardzo szybko znikają, gdy zrozumiesz, jaki wpływ ma to na łatwość utrzymania i wydajność. –