MySQL NATURAL LEFT OUTER JOIN vs LEFT OUTER JOIN

时间:2016-11-02 01:27:23

标签: mysql database outer-join natural-join

如果我遇到以下情况:

**table 1
person| money
    A | 2
    B | 10
-------------


**table 2 
person| cars
    A | 3
    C | 10

---------------

两者有什么区别?

SELECT * FROM table1 NATURAL LEFT OUTER JOIN table2;

产生

person| money |cars
    A | 2     |3
    B | 10    |NULL
---------------

VS

SELECT * FROM table1 LEFT OUTER JOIN table 2 ON person

1 个答案:

答案 0 :(得分:1)

我认为您的非NATURAL版本中存在拼写错误,您要比较的是:

SELECT * FROM table1 NATURAL LEFT OUTER JOIN table2;

SELECT * FROM table1 LEFT OUTER JOIN table2 USING ( person );

首先,我希望两者的结果相等。**

其次,在您的案例中,我没有看到非NATURAL / USING版本中的任何一点,因为您只有一列共同且它们一直被命名。

**我打算通过"有关资格" (例如,列顺序和行顺序不相关)但OUTER JOIN明确设计为生成空值,在关系模型中没有位置!因此,我建议您完全避免OUTER JOIN并采取其他方法,例如将0(汽车)用作table2中没有条目的人的默认值似乎是完全合理的:

SELECT person, money, cars 
  FROM table1 
       NATURAL JOIN table2
UNION
SELECT person, money, 0 AS cars 
  FROM table1 
 WHERE person NOT IN ( SELECT person FROM table2 );