mysql - 从不同表的 2 列排序

标签 mysql sql-order-by

我正在尝试将所有商品提取到 POS 系统上进行销售。

我有几个表需要加入和排序/分组。我希望我能得到解释。

Table `items`:
+---------+--------+
| item_id |  Name  |
+---------+--------+
|    33   | Thing1 |
|    34   | Thing2 |
|    54   | Thing3 |
|    67   | Thing4 |
+---------+--------+

Table `kits`:
+-------------+------+
| item_kit_id | Name |
+-------------+------+
|      1      | Kit1 |
|      2      | Kit2 |
+-------------+------+


Table `sales`: 
+---------+-------------+---------+
| sale_id | sale_date   |  Total  |
+---------+-------------+---------+
|       1 |  2016-06-11 | 100.00  |
|       2 |  2016-06-12 | 145.00  |
+---------+-------------+---------+

Table `sale_items`:
+-----+---------+----------+---------+
| id  | sale_id | line_num | Item_id |
+-----+---------+----------+---------+
|  1  |     1   |    1     |    33   |
|  2  |     1   |    3     |    54   |
|  3  |     2   |    1     |    34   |
|  4  |     2   |    2     |    67   |
+-----+---------+----------+---------+

Table `sale_kit_items`:
+-----+---------+----------+-------------+
| id  | sale_id | line_num | item_kit_id |
+-----+---------+----------+-------------+
|  1  |     1   |    2     |       1     |
|  2  |     2   |    3     |       2     |
+-----+---------+----------+-------------+

我希望结果看起来像

Results:
+---------+----------+---------+-------------+
| sale_id | line_num | item_id | item_kit_id |
+---------+----------+---------+-------------+
|    1    |     1    |    33   |     null    |
|    1    |     2    |   null  |       1     |
|    1    |     3    |    54   |     null    |
|    2    |     1    |    54   |     null    |
|    2    |     2    |    67   |     null    |
|    2    |     3    |  null   |       2     |
+---------+----------+---------+-------------+

如果我能得到,甚至更好:

Results:
+---------+----------+---------+-------------+--------+
| sale_id | line_num | item_id | item_kit_id |  name  |
+---------+----------+---------+-------------+--------+
|    1    |     1    |    33   |     null    | Thing1 |
|    1    |     2    |   null  |       1     |  Kit1  |
|    1    |     3    |    54   |     null    | Thing2 |
|    2    |     1    |    54   |     null    | Thing3 |
|    2    |     2    |    67   |     null    | Thing4 |
|    2    |     3    |  null   |       2     |  Kit2  |
+---------+----------+---------+-------------+--------+

最佳答案

我花了一些时间来了解您的情况...

编辑

也许您应该将带有 itemssale_kit_items 的 LEFT JOIN 更改为 INNER JOIN(我希望可以在各自的表中找到 ID)。

select s.sale_id, si.line_num, si.item_id, null as item_kit_id, i.name
from sales s 
left join sale_items si on s.sale_id = si.sale_id
left join items i on si.item_id = i.item_id
union all
select s.sale_id, ski.line_num, null as item_id, ski.item_kit_id, k.name
from sales s 
left join sale_kit_items ski on s.sale_id = ski.sale_id 
left join kits k on ski.item_kit_id = k.item_kit_id
order by 1, 2
;

A live demo can be found here .

关于mysql - 从不同表的 2 列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416035/

相关文章:

java - 插入海量数据时的 Hibernate 性能问题

java - Hibernate 关系注解

php - Mysql Order by Tweak

php - 调用成员函数 fetch_assoc() 时发生 fatal error - 为什么 fetch_assoc() 不起作用?

mysql - 功能齐全的个人图书馆系统的数据库设计,链接标题,作者,系列,注释和标签

angularjs - orderBy number angular js

sql - 使用 MySql,我可以对列进行排序但最后有 0 吗?

mysql - 先按姓氏排序列表

MySql 查询具有三位或更多小数位的价格

sql - 如何获得按不同列排序的不同结果? SQL 数据库