sql >> Databáze >  >> RDS >> Mysql

Je levé spojení komutativní? Jaké má vlastnosti?

Wikipedie:

"V matematice je binární operace komutativní, pokud změna pořadí operandů nemění výsledek. Je to základní vlastnost mnoha binárních operací a závisí na ní mnoho matematických důkazů."

Odpověď:

ne, levé spojení není komutativní. A vnitřní spojení je.

Ale to není to, na co se ptáte.

Je následující dotaz:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(vše připojeno ke sloupci id) ekvivalentní:

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    

Odpověď:

Také ne. Odbory a spojení ve skutečnosti nedosahují toho samého, obecně řečeno. V některých případech je možná budete schopni napsat ekvivalentně, ale nemyslím si, že tak obecný pseudo sql, který ukazujete. Zdá se, že konstituce ON by neměla fungovat (možná něco, o čem v MySQL nevím?)

Zde je zjednodušená sada dotazů, o kterých si myslím, že by byly ekvivalentní.

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:

Zde je další příklad, který je vám bližší, ale v podstatě stejný.

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

je stejný jako

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

Ale já pořád Nemyslete si, že odpovídám na vaši skutečnou otázku.




  1. MySQL vybírá pole obsahující úvodní nebo koncové mezery

  2. Instalace SQL Server Failover Cluster -4

  3. Jak zřetězit řetězce na serveru SQL pomocí CONCAT()

  4. Spouštěče MYSQL:JSON_SEARCH celočíselná hodnota v poli json celých čísel