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

дясно присъединяване срещу ляво присъединяване

Всъщност не, защото RIGHT JOIN и LEFT JOIN са симетрични. Това е:

A LEFT JOIN B = B RIGHT JOIN A

RIGHT JOIN е просто синтактична захар. Оптимизаторът може да пренапише дясно присъединяване към ляво присъединяване:

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)

Обърнете внимание на LEFT JOIN в пренаписването на оптимизатора (таблиците са разменени):

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) 

Забележете, че (A DIGHT JOIN B !=A LEFT JOIN B), освен ако (A INNER JOIN B =A LEFT JOIN B). Това е така, защото A RIGHT JOIN B не е симетричен с A LEFT JOIN B (симетричен е с B LEFT JOIN A).

Във вашия случай A RIGHT JOIN B ще бъде същото като A LEFT JOIN B, освен ако няма стойности NULL в колоните, към които се присъединявате. Ако има стойности NULL, тогава A LEFT JOIN B НЯМА да бъде същото като A RIGHT JOIN B. Ако добавите нови статии, без да добавяте свързаната дискусионна група (или обратно), тогава резултатите също ще се променят.



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

  2. Специални символи в PHP / MySQL

  3. избягвайте сортирането по ключовата дума MYSQL IN

  4. Какъв е този оператор <=> в MySQL?

  5. Връзка ownsToMany в Laravel в множество бази данни