如果我有以下情况:

**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
---------------




SELECT * FROM table1 LEFT OUTER JOIN table 2 ON person

最佳答案

我认为您在非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 );

关于mysql - MySQL自然左外联接vs左外联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40371130/

10-09 18:26