Mysql 从不同表中的2列按顺序排序
我正在尝试在POS系统上提取所有要销售的商品 我有几个表需要加入并按顺序/分组。我希望我能得到解释Mysql 从不同表中的2列按顺序排序,mysql,sql-order-by,Mysql,Sql Order By,我正在尝试在POS系统上提取所有要销售的商品 我有几个表需要加入并按顺序/分组。我希望我能得到解释 Table `items`: +---------+--------+ | item_id | Name | +---------+--------+ | 33 | Thing1 | | 34 | Thing2 | | 54 | Thing3 | | 67 | Thing4 | +---------+--------+ Table `kits`: +-
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 |
+---------+----------+---------+-------------+--------+
我花了点时间才明白你的想法 编辑 也许您应该将带有
items
和sale\u kit\u items
的左侧联接更改为内部联接(我希望可以在相应的表中找到ID)
A 你试过什么?请注意,结果的最后一行与输入不一致;如果
item\u kit\u id=3
,则kits
表中没有相应的记录,因此名称应为null
。此外,结果的第4行应具有item\u id=34
@GiorgosAltanis谢谢。我在数据中迷失了方向。我编辑了信息谢谢你这么快的回复。这是我关于stackoverflow的第一个问题,我对答案的速度感到惊讶。我以前从这个网站上得到过成百上千的答案,但我从来都不知道答案的速度有多快。是的,我确实想在这种情况下使用内部连接添加其中s.sale_id=100
到工会的两个分支:选择。。。其中s.sale_id=100联合所有选择。。。其中,s.sale_id=100订单乘以1,2这是我的猜测。谢谢
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
;