sql >> Databasteknik >  >> RDS >> Mysql

höger sammanfogning kontra vänster sammanfogning

Inte riktigt, eftersom RIGHT JOIN och LEFT JOIN är symmetriska. Det vill säga:

A LEFT JOIN B = B RIGHT JOIN A

RIGHT JOIN är bara syntaktisk socker. Optimeraren kan skriva om en högerkoppling till en vänsterkoppling:

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)

Notera VÄNSTER JOIN i omskrivningen av optimeraren (tabellerna är utbytta):

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ägg märke till att (A RIGHT JOIN B !=A LEFT JOIN B) om inte (A INNER JOIN B =A LEFT JOIN B). Detta beror på att A RIGHT JOIN B inte är symmetrisk med A LEFT JOIN B (den är symmetrisk med B LEFT JOIN A).

I ditt fall kommer A RIGHT JOIN B att vara samma som A LEFT JOIN B om det inte finns NULL-värden i kolumnerna du går med i. Om det finns NULL-värden kommer A LEFT JOIN B INTE att vara detsamma som A RIGHT JOIN B. Om du lägger till nya artiklar utan att lägga till den associerade nyhetsgruppen (eller vice versa) kommer resultaten också att förändras.



  1. MySQL subquery returnerar mer än en rad

  2. XSD till MySQL Schema

  3. MySQL Prepare Statement - Maximal längd 1000 tecken

  4. Steg för att ändra administratörslösenord som har förlorats eller glömts av en EBS WebLogic Domain R12.2