Mysql 在多个列和条件上左连接
我有两张桌子,一张是订单,一张是产品Mysql 在多个列和条件上左连接,mysql,sql,database,join,mysql-workbench,Mysql,Sql,Database,Join,Mysql Workbench,我有两张桌子,一张是订单,一张是产品 ORDERS TABLE +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+ | order_id | order_by | status | created_at | product1 | product2 | delivery_date | pickup
ORDERS TABLE
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
| order_id | order_by | status | created_at | product1 | product2 | delivery_date | pickup |
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
| 1 | Maria | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-17 00:00:00 | 0 |
| 2 | Joao | 0 | 2020-07-20 00:00:00 | 2 | 0 | 2020-07-20 00:00:00 | 0 |
| 3 | Jose | 1 | 2020-07-20 00:00:00 | 3 | 0 | 2020-07-20 00:00:00 | 0 |
| 4 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 |
| 5 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 |
| 6 | Joaozinho | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-22 00:00:00 | 0 |
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
PRODUCTS TABLE
+----+-----------+-------+
| id | name | price |
+----+-----------+-------+
| 1 | Produto 1 | 11 |
| 2 | Produto 2 | 22 |
| 3 | Produto 3 | 33 |
| 4 | Produto 4 | 44 |
| 5 | Produto 5 | 55 |
+----+-----------+-------+
EXPECTED OUTPUT
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+-----------+----------+-----------+----------+
| order_id | order_by | status | created_at | product1 | product2 | delivery_date | pickup | p1_name | p1_price | p2_name | p2_price |
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+-----------+----------+-----------+----------+
| 1 | Maria | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-17 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
| 2 | Joao | 0 | 2020-07-20 00:00:00 | 2 | 0 | 2020-07-20 00:00:00 | 0 | Produto 2 | 22 | null | null |
| 3 | Jose | 1 | 2020-07-20 00:00:00 | 3 | 0 | 2020-07-20 00:00:00 | 0 | Produto 3 | 33 | null | null |
| 4 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
| 5 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
| 6 | Joaozinho | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-22 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 22 |
+----------+-----------+--------+---------------------+----------+----------+---------------------+--------+------+-----------+-------+------------------+
我需要在orders表和price列中的每个产品(product1、product2..)上使用不同的名称(product1\u name、product2\u name..)进行左联接
添加product2应该没有那么难,只是一个练习…在
产品
表上需要两个连接
s:
select
o.*,
p1.name p1_name,
p1.price p1_price,
p2.name p2_name,
p2.price p2_price
from orders o
left join products p1 on p1.id = o.product1
left join products p2 on p2.id = o.product2
如果
product1
始终可用,则可以将第一个左联接
转换为内部联接
,这会使查询稍微更高效。以表格形式提供示例数据和预期输出。您正在使用哪个SQL引擎,因为您已经标记了多个。请同时使用示例数据。使用示例数据更新。我正在使用MySQL.expected output?我需要将列名更改为productX_name和productX_Price您可以通过搜索文档中的“alias”来了解如何执行此操作
select
o.*,
p1.name p1_name,
p1.price p1_price,
p2.name p2_name,
p2.price p2_price
from orders o
left join products p1 on p1.id = o.product1
left join products p2 on p2.id = o.product2