Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tham gia trái có giao hoán không? Những tính chất của nó là gì?

Wikipedia:

"Trong toán học, một phép toán nhị phân có tính chất giao hoán nếu việc thay đổi thứ tự của các toán hạng không làm thay đổi kết quả. Đây là tính chất cơ bản của nhiều phép toán nhị phân và nhiều phép chứng minh toán học phụ thuộc vào nó."

Trả lời:

không, phép nối bên trái không có tính chất giao hoán. Và tham gia bên trong là.

Nhưng đó không thực sự là những gì bạn đang hỏi.

Là truy vấn sau:

TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD

(tất cả được nối vào một cột id) tương đương với:

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    

Trả lời:

Cũng không. Nói chung, các đoàn thể và sự tham gia không thực sự hoàn thành cùng một thứ. Trong một số trường hợp, bạn có thể viết chúng một cách tương đương, nhưng tôi không nghĩ rằng bạn đang thể hiện một sql giả chung chung như vậy. Hiến pháp BẬT có vẻ như nó không hoạt động (có thể điều gì đó mà tôi không biết trong MySQL?)

Đây là một tập hợp các truy vấn được đơn giản hóa mà tôi nghĩ là tương đương.

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

Chỉnh sửa 2:

Đây là một ví dụ khác gần giống với của bạn hơn nhưng về bản chất thì giống nhau.

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

giống như

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

Nhưng tôi vẫn vẫn đừng nghĩ rằng tôi đang trả lời câu hỏi thực sự của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khoảng trắng theo sau trong varchar cần được xem xét so sánh

  2. Cần tư vấn về cấu trúc cơ sở dữ liệu

  3. Cách sao lưu cơ sở dữ liệu MySQL bằng cron Jobs

  4. Triển khai cấu trúc dữ liệu phân cấp trong cơ sở dữ liệu

  5. php mysql sắp xếp kết quả theo thứ tự được tìm nạp