sql >> Database teknologi >  >> RDS >> Mysql

Er left join kommutativ? Hvad er dens egenskaber?

Wikipedia:

"I matematik er en binær operation kommutativ, hvis ændring af rækkefølgen af ​​operanderne ikke ændrer resultatet. Det er en grundlæggende egenskab ved mange binære operationer, og mange matematiske beviser afhænger af det."

Svar:

nej, en venstre join er ikke kommutativ. Og indre sammenføjning er.

Men det er egentlig ikke det, du spørger om.

Er følgende forespørgsel:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD
 

(alle sammenføjet til en id-kolonne) svarende til:

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    
 

Svar:

Også nej. Fagforeninger og sammenslutninger opnår ikke rigtig det samme, generelt set. I nogle tilfælde kan du muligvis skrive dem tilsvarende, men jeg tror ikke, at du viser så generel pseudo sql. ON-forfatningen ser ud til, at den ikke burde virke (måske noget, jeg ikke kender til i MySQL?)

Her er et forenklet sæt forespørgsler, som jeg tror ville svare til.

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

Rediger 2:

Her er et andet eksempel, der er tættere på din, men i det væsentlige det samme.

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

er det samme som

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
 

Men jeg stadig tror ikke, jeg svarer på dit rigtige spørgsmål.




  1. Konverter gem/opdater opkaldsskinner til sql

  2. cakephp venskab mellem brugere Sammenkædning af modeller

  3. Kunne ikke oprette forbindelse til mysql på 127.0.0.1:3306 med brugerens root-adgang nægtet for brugeren 'root'@'localhost'(ved hjælp af adgangskode:JA)

  4. Postgres:få min, max, samlede værdier i ét valg