Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jaka jest różnica między używaniem i włączaniem w tabelach złączeń w MySQL?

Nie używam składni USING, ponieważ

  1. Większość moich złączeń nie jest do tego dopasowana (nie jest to ta sama nazwa pola, która jest dopasowywana i/lub wiele dopasowań w złączeniu) i
  2. nie jest od razu oczywiste, na co to się przekłada w przypadku więcej niż dwóch tabel

tj. zakładając 3 tabele z kolumnami 'id' i 'id_2', nie

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

zostań

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

lub

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

czy coś jeszcze?

Ustalenie tego dla konkretnej wersji bazy danych jest dość trywialnym ćwiczeniem, ale nie mam dużej pewności, że jest ona spójna we wszystkich bazach danych, i nie jestem jedyną osobą, która musi dbać o mój kod (więc inne osoby również będą musiały zdawać sobie sprawę z tego, z czym jest to równoważne).

Oczywista różnica w porównaniu z WHERE vs ON polega na tym, że połączenie jest zewnętrzne:

Zakładając T1 z pojedynczym polem ID, jednym wierszem zawierającym wartość 1 oraz T2 z polem ID i WARTOŚĆ (jeden wiersz, ID=1, WARTOŚĆ=6), otrzymujemy:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

nie daje wierszy, ponieważ GDZIE jest wymagane do dopasowania, podczas gdy

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

da jeden wiersz z wartościami

1, NULL, NULL

ponieważ ON jest wymagane tylko do dopasowania sprzężenia, co jest opcjonalne ze względu na to, że jest zewnętrzne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pamięć podręczna zapytań nie działa

  2. Automatyczne lub regularne tworzenie kopii zapasowych danych mysql

  3. Transakcja mysql Node.js

  4. Jak liczyć przedmioty według kategorii?

  5. jak uzyskać czas ładowania w milisekundach lub mikrosekundach w mysql