我有2个表,products
和origins
产品:
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
如何影响我获得第一行和第三行而不是第一行和第二行的结果?
答案 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