sql >> Databasteknik >  >> RDS >> Mysql

Är vänsteranslutningen kommutativ? Vilka är dess egenskaper?

Wikipedia:

"Inom matematiken är en binär operation kommutativ om du ändrar ordningen på operanderna inte ändrar resultatet. Det är en grundläggande egenskap för många binära operationer, och många matematiska bevis beror på det."

Svar:

nej, en vänsterkoppling är inte kommutativ. Och inre sammanfogning är.

Men det är inte riktigt vad du frågar efter.

Är följande fråga:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(alla kopplade till en id-kolumn) motsvarande:

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:

Också nej. Fackföreningar och sammanslutningar åstadkommer inte riktigt samma sak, generellt sett. I vissa fall kanske du kan skriva dem på motsvarande sätt, men jag tror inte att du visar så generell pseudo sql. ON-konstitutionen verkar inte fungera (kanske något som jag inte känner till i MySQL?)

Här är en förenklad uppsättning frågor som jag tror skulle vara likvärdiga.

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

Edit 2:

Här är ett annat exempel som är närmare ditt men i huvudsak samma.

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

är samma 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 jag fortfarande tror inte att jag svarar på din riktiga fråga.




  1. Effektiv hantering av dataförändringar

  2. Filtrering efter OFFSET-FETCH-alternativ i Välj fråga - SQL Server / TSQL självstudie del 118

  3. WHERE-klausul förväxling med SUB

  4. Hur sorterar man en associativ array i PL/SQL?