MySQL JOIN与LIMIT查询结果

时间:2016-04-16 13:48:44

标签: mysql

我有2个表,productsorigins

产品:

p_id | name | origin_id 
------------------------
  1  |  P1  |    1
  2  |  P2  |    2
  3  |  P3  |    1

起源:

o_id | name 
-------------
  1  |  O1  
  2  |  O2  

我使用以下查询:

SELECT * FROM `products` LEFT OUTER JOIN `origins` 
 ON ( `products`.`origin_id` = `origins`.`o_id` ) LIMIT 2

我得到以下结果

p_id | name | origin_id | o_id | name 
-----------------------------------------
  1  |  P1  |    1      |   1  |  O1  
  3  |  P3  |    1      |   1  |  O1  

我想知道LEFT OUTER JOIN如何影响我获得第一行和第三行而不是第一行和第二行的结果?

2 个答案:

答案 0 :(得分:1)

您无法控制表中行的固有顺序。它表现得像一套。如果您想订购它,请使用order by子句。

SELECT * FROM `products` p LEFT OUTER JOIN `origins` o
ON ( p.`origin_id` = o.`o_id` ) ORDER BY p.`name` LIMIT 2

输出:

p_id | name | origin_id | o_id | name 
-----------------------------------------
  1  |  P1  |    1      |   1  |  O1  
  2  |  P2  |    2      |   2  |  O2  

答案 1 :(得分:1)

如果您未使用ORDER BY条款,则无法保证SELECT查询的特定订单。

因此,当我们需要任何特定订单时,我们应该使用ORDER BY

请参阅:MySQL Ref: What is The Default Sort Order of SELECT with no ORDER BY Clause