我试图了解内部联接是如何工作的,而我正在研究这个例子
在这个例子中,我有三个表
// people table
|people_id | people_name |
| 1 | Foo |
| 2 | Bar |
//orders table
| order_id | people_id | order_title |
| 1 | 1 | First_title |
| 2 | 2 | second_title|
| 3 | 2 | Third_title |
//items table
| item_id |order_id | people_id | title |
| 1 | 1 | 1 | Apple |
| 2 | 1 | 1 | Pear |
| 3 | 2 | 2 | Apple |
| 4 | 3 | 2 | Orange |
| 5 | 3 | 2 | Coke |
| 6 | 3 | 2 | Cake |
我只是INNER使用查询
加入这些表SELECT * FROM people INNER JOIN orders ON people.people_id = orders.people_id INNER JOIN items ON people.people_id = items.people_id;
我得到了以下结果
我无法理解。如何写第三列(order_id)和第六列(item_id)。
我的意思是order_id
和item_id
可能有很多可能性。例如,他们可以像这样写
|order_id| |item_id|
| 1 | | 1 |
| 1 | | 2 |
| 2 | | 3 |
| 2 | | 4 |
| 2 | | 5 |
| 2 | | 6 |
| 3 | | 3 |
| 3 | | 4 |
| 3 | | 5 |
| 3 | | 6 |
那么有人可以解释这些列是如何编写的?
答案 0 :(得分:1)
SQL表和结果集表示无序集。它们没有固有的顺序。
唯一的例外是将ORDER BY
添加到最外层的SELECT
。
您的问题似乎与结果的排序有关。如果没有ORDER BY
,结果可以按任何顺序返回 - 实际上,查询的不同运行可以以不同的顺序返回结果。
所以:
SELECT *
FROM people p INNER JOIN
orders o
USING (pe_id) INNER JOIN
items i
USING (order_id)
ORDER BY order_id, item_id;
附加说明:
*
。USING
子句很方便。pe_id
中items
的出现似乎是一个糟糕的数据库设计。您应该从orders
获得此值。