Mysql
 sql >> база данни >  >> RDS >> Mysql

Комутативно ли е лявото съединение? Какви са неговите свойства?

Уикипедия:

„В математиката двоичната операция е комутативна, ако промяната на реда на операндите не променя резултата. Това е фундаментално свойство на много двоични операции и много математически доказателства зависят от него.“

Отговор:

не, лявото съединение не е комутативно. И вътрешното присъединяване е.

Но това не е точно това, което питате.

Това е следната заявка:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(всички свързани към колона с id), еквивалентно на:

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    

Отговор:

Също така не. Обединенията и обединенията всъщност не постигат едно и също нещо, най-общо казано. В някои случаи може да сте в състояние да ги напишете еквивалентно, но не мисля, че показвате толкова общ псевдо sql. Изглежда, че ON конституцията не трябва да работи (може би нещо, за което не знам в MySQL?)

Ето опростен набор от заявки, които според мен биха били еквивалентни.

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

Редактиране 2:

Ето още един пример, който е по-близо до вашия, но по същество същият.

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

е същото като

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

Но аз все още не мисли, че отговарям на истинския ти въпрос.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql Създаване на база данни със специални знаци в името

  2. Django миграция sql за условни тригери

  3. Защо този пример за избор на актуализация работи?

  4. Как да класирам стойности на масив с дублиращи се стойности и пропускам някои позиции, ако има равенство?

  5. mysql:отнасящ се до колони по числа