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

tham gia bên phải so với tham gia bên trái

Không hẳn, bởi vì RIGHT JOIN và LEFT JOIN là đối xứng. Đó là:

A LEFT JOIN B = B RIGHT JOIN A

RIGHT JOIN chỉ đơn thuần là đường cú pháp. Trình tối ưu hóa có thể viết lại một phép nối phải thành một phép nối bên trái:

mysql> explain extended select * from t right join t t2 using (c1)\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t2
         type: index
possible_keys: NULL
          key: c2
      key_len: 5
          ref: NULL
         rows: 4201
     filtered: 100.00
        Extra: Using index
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: test.t2.c1
         rows: 1
     filtered: 100.00
        Extra: 
2 rows in set, 1 warning (0.00 sec)

Lưu ý THAM GIA TRÁI trong việc ghi lại trình tối ưu hóa (các bảng được hoán đổi):

mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: select `test`.`t2`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t`.`c2` AS
`c2` from `test`.`t` `t2` left join `test`.`t` on((`test`.`t`.`c1` = `test`.`t2`.`c1`))  where 1
1 row in set (0.00 sec) 

Lưu ý rằng (A RIGHT JOIN B! =A LEFT JOIN B) trừ khi (A INNER JOIN B =A LEFT JOIN B). Điều này là do A RIGHT JOIN B không đối xứng với A LEFT JOIN B (nó đối xứng với B LEFT JOIN A).

Trong trường hợp của bạn, A RIGHT JOIN B sẽ giống như A LEFT JOIN B trừ khi có giá trị NULL trong các cột bạn đang tham gia. Nếu có giá trị NULL, thì A LEFT JOIN B sẽ KHÔNG giống A RIGHT JOIN B. Nếu bạn thêm các bài báo mới mà không thêm nhóm tin được liên kết (hoặc ngược lại) thì kết quả cũng sẽ thay đổi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để lặp lại đúng cách trong một hàm được lưu trữ trên MySQL?

  2. Đăng hàm Javascript và gọi tập lệnh php

  3. Làm thế nào để sử dụng 'khác biệt' trong mô hình zend db

  4. MySQL:Quyền truy cập bị từ chối đối với người dùng 'user' @ 'IP_ADDRESS' - Không cho phép truy cập từ xa đối với một số máy chủ đối với các máy chủ khác

  5. Câu lệnh chèn MySql vào kiểu dữ liệu nhị phân?