sql >> Database >  >> RDS >> Mysql

Wat is het verschil tussen het gebruiken en inschakelen van tabeljoins in MySQL?

Ik gebruik de USING-syntaxis niet, omdat

  1. de meeste van mijn joins zijn er niet geschikt voor (niet dezelfde veldnaam die wordt gevonden en/of meerdere overeenkomsten in de join) en
  2. het is niet meteen duidelijk wat het betekent in het geval met meer dan twee tabellen

dwz uitgaande van 3 tabellen met de kolommen 'id' en 'id_2', is dat niet het geval

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

word

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

of

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

of weer iets anders?

Dit uitzoeken voor een bepaalde databaseversie is een vrij triviale oefening, maar ik heb er niet veel vertrouwen in dat het consistent is in alle databases, en ik ben niet de enige persoon die mijn code moet onderhouden (dus de andere mensen zullen ook moeten weten waar het gelijk aan is).

Een duidelijk verschil met de WHERE vs ON is of de join buitenste is:

Uitgaande van een T1 met een enkel ID-veld, een rij met de waarde 1 en een T2 met een ID en VALUE-veld (een rij, ID=1, VALUE=6), dan krijgen we:

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

geeft geen rijen, omdat de WHERE moet overeenkomen, terwijl

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

geeft een rij met de waarden

1, NULL, NULL

omdat de AAN alleen nodig is voor het matchen van de join, wat optioneel is omdat het outer is.



  1. Hoe rond je af op de dichtstbijzijnde X minuten met PL/pgSQL?

  2. Hoe de grootte van de tabellen van een MySQL-database te krijgen?

  3. Gratis MySQL-synchronisatietool

  4. Waarschuwing:mysql_result() [function.mysql-result]:kan niet naar rij 0 springen op MySQL-resultaatindex 5 in profile.php op regel 11