sql >> Database teknologi >  >> RDS >> Mysql

højre join versus venstre join

Egentlig ikke, for RIGHT JOIN og LEFT JOIN er symmetriske. Det vil sige:

A LEFT JOIN B = B RIGHT JOIN A

RIGHT JOIN er blot syntaktisk sukker. Optimizeren kan omskrive en højre join til en venstre 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)

Bemærk VENSTRE JOIN i omskrivning af optimeringsværktøjet (tabellerne er byttet):

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) 

Bemærk at (A HØJRE JOIN B !=A LEFT JOIN B), medmindre (A INNER JOIN B =A LEFT JOIN B). Dette skyldes, at A RIGHT JOIN B ikke er symmetrisk med A LEFT JOIN B (den er symmetrisk med B LEFT JOIN A).

I dit tilfælde vil A RIGHT JOIN B være det samme som A LEFT JOIN B, medmindre der er NULL-værdier i de kolonner, du tilslutter dig. Hvis der er NULL-værdier, så vil A LEFT JOIN B IKKE være det samme som A RIGHT JOIN B. Hvis du tilføjer nye artikler uden at tilføje den tilknyttede nyhedsgruppe (eller omvendt), vil resultaterne også ændre sig.



  1. Hvordan kan jeg få MySQL-log til at planlægge begivenheder?

  2. MySQL-fejl 2006:mysql-serveren er forsvundet

  3. Opstilling og identifikation af rækkemål i eksekveringsplaner

  4. Noter om PostgreSQL B-Tree-indekser