如果我有以下情况:
**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/