sql >> Database >  >> RDS >> Mysql

Is left join commutatief? Wat zijn de eigenschappen?

Wikipedia:

"In de wiskunde is een binaire bewerking commutatief als het veranderen van de volgorde van de operanden het resultaat niet verandert. Het is een fundamentele eigenschap van veel binaire bewerkingen en veel wiskundige bewijzen zijn ervan afhankelijk."

Antwoord:

nee, een left join is niet commutatief. En inner join is.

Maar dat is niet echt wat je vraagt.

Is de volgende vraag:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(allemaal gekoppeld aan een id-kolom) gelijk aan:

TableA INNER JOIN TableB
       INNER JOIN TableC
        LEFT JOIN TableD   
UNION     
TableA INNER JOIN TableB
        LEFT JOIN TableC ON TableB.c_id IS NULL
        LEFT JOIN TableD    

Antwoord:

Ook nee. Vakbonden en toetredens bereiken over het algemeen niet hetzelfde. In sommige gevallen kun je ze misschien gelijkwaardig schrijven, maar ik denk niet dat de algemene pseudo-sql die je laat zien. De ON-constitutie lijkt niet te werken (misschien iets dat ik niet weet in MySQL?)

Hier is een vereenvoudigde reeks zoekopdrachten waarvan ik denk dat ze gelijkwaardig zijn.

SELECT * 
  FROM TableA a 
       LEFT JOIN 
       TableB b ON a.id = b.id_a 

SELECT * 
  FROM TableA a 
       INNER JOIN 
       TableB b ON a.id = b.id_a 
UNION      
SELECT * 
  FROM TableA a  
       LEFT JOIN 
       TableB b ON a.id = b.id_a 
 WHERE TableB.id IS NULL

Bewerken 2:

Hier is nog een voorbeeld dat dichter bij jou ligt, maar in wezen hetzelfde is.

SELECT * 
  FROM            TableA a 
       INNER JOIN TableB b ON a.id = b.id_a 
        LEFT JOIN TableC c ON b.id = c.id_b 

is hetzelfde als

SELECT * 
  FROM TableA a 
       INNER JOIN TableB b ON a.id = b.id_a 
       INNER JOIN TableC c ON b.id = c.id_b 
UNION      
SELECT * 
  FROM TableA a  
       INNER JOIN TableB b ON a.id = b.id_a 
        LEFT JOIN TableC c ON b.id = c.id_b 
 WHERE TableC.id IS NULL

Maar ik nog denk niet dat ik je echte vraag beantwoord.




  1. Hoe om te gaan met zoekopdrachten met de Japanse taal met MySql?

  2. Problemen met het omwikkelen van hoofd rond complexe SQL-verwijderquery

  3. Galera-cluster bewaken voor MySQL of MariaDB - Metrics begrijpen (bijgewerkt)

  4. RMAN mislukt met RMAN-06900 RMAN-06901 ORA-04031