Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy lewe sprzężenie jest przemienne? Jakie są jego właściwości?

Wikipedia:

„W matematyce operacja binarna jest przemienna, jeśli zmiana kolejności operandów nie zmienia wyniku. Jest to podstawowa właściwość wielu operacji binarnych i zależy od niej wiele dowodów matematycznych”.

Odpowiedź:

nie, lewe sprzężenie nie jest przemienne. A połączenie wewnętrzne to.

Ale tak naprawdę nie o to pytasz.

Czy następujące zapytanie:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(wszystkie połączone z kolumną id) równoważne do:

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    

Odpowiedź:

Również nie. Ogólnie rzecz biorąc, związki i łączenia nie dają tak naprawdę tego samego. W niektórych przypadkach możesz być w stanie napisać je równoważnie, ale nie sądzę, aby wyświetlałeś tak ogólny pseudo sql. Wygląda na to, że konstytucja ON nie powinna działać (może coś, o czym nie wiem w MySQL?)

Oto uproszczony zestaw zapytań, które moim zdaniem byłyby równoważne.

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

Edycja 2:

Oto kolejny przykład, który jest bliższy Twojemu, ale zasadniczo taki sam.

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

jest taki sam jak

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 ja nadal nie myśl, że odpowiadam na twoje prawdziwe pytanie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. prosty sposób na zsumowanie wyniku z UNION w MySql

  2. Tworzenie api CakePHP REST z istniejącego projektu

  3. Jak poprawić „java.sql.SQLFeatureNotSupportedException” podczas korzystania z metody createArrayOf()

  4. MySQL :Gdy nazwa parametru procedury składowanej jest taka sama jak nazwa kolumny tabeli

  5. Laravel 4 nie może uruchamiać całych zapytań RAW