SQL join and left outer join: why are the results different?
本问题已经有最佳答案,请猛点这里访问。
我有一张桌子。一个合作伙伴可以有一个或多个地址。当然,一个地址可能"属于"多个部分。所以我有3张桌子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
这给了我这些结果:
1 2 3 4 5 6 7 8 | +----------------------------+-------------+------+------+--------+ | nom | nom | id_r | id_p | region | +----------------------------+-------------+------+------+--------+ | Ferme Auberge Christlesgut | Breitenbach | 1 | 2 | Alsace | | Alice Pizza | Strasbourg | 1 | 1 | Alsace | | Au Vieux Cellier | Strasbourg | 1 | 1 | Alsace | | Auberge du 7Eme Art | Strasbourg | 1 | 1 | Alsace | +----------------------------+-------------+------+------+--------+ |
现在,如果我在最后一张表(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
结果不一样。见:
1 2 3 4 5 6 7 8 | +---------------------+----------+------+------+----------------+ | nom | nom | id_r | id_p | region | +---------------------+----------+------+------+----------------+ | 'Le 144' Petrossian | Paris 18 | 12 | 43 | ?le-de-France | | 'Le 144' Petrossian | Paris 08 | 12 | 43 | ?le-de-France | | 'O'Quai' | Vouvray | 7 | 26 | Centre | | 'O'Quai' | Tours | 7 | 26 | Centre | +---------------------+----------+------+------+----------------+ |
我认为不应该,因为在第一个查询中,id_region和id_department不为空,所以如果您执行"join"或"left outer join",结果应该是相同的。还是我错过了什么?
您遇到的问题与以下事实有关:当没有指定顺序时,SQL对结果的顺序不作任何保证。如果您添加了ORDERBY子句,那么您应该得到相同的结果,前提是表中的所有行都有匹配的键(当然)。