在多个列和条件上左连接

k2fxgqgv  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(417)

我有两张table,一张是订单,一张是产品

  1. ORDERS TABLE
  2. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
  3. | order_id | order_by | status | created_at | product1 | product2 | delivery_date | pickup |
  4. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
  5. | 1 | Maria | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-17 00:00:00 | 0 |
  6. | 2 | Joao | 0 | 2020-07-20 00:00:00 | 2 | 0 | 2020-07-20 00:00:00 | 0 |
  7. | 3 | Jose | 1 | 2020-07-20 00:00:00 | 3 | 0 | 2020-07-20 00:00:00 | 0 |
  8. | 4 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 |
  9. | 5 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 |
  10. | 6 | Joaozinho | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-22 00:00:00 | 0 |
  11. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+
  12. PRODUCTS TABLE
  13. +----+-----------+-------+
  14. | id | name | price |
  15. +----+-----------+-------+
  16. | 1 | Produto 1 | 11 |
  17. | 2 | Produto 2 | 22 |
  18. | 3 | Produto 3 | 33 |
  19. | 4 | Produto 4 | 44 |
  20. | 5 | Produto 5 | 55 |
  21. +----+-----------+-------+
  22. EXPECTED OUTPUT
  23. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+-----------+----------+-----------+----------+
  24. | order_id | order_by | status | created_at | product1 | product2 | delivery_date | pickup | p1_name | p1_price | p2_name | p2_price |
  25. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+-----------+----------+-----------+----------+
  26. | 1 | Maria | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-17 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
  27. | 2 | Joao | 0 | 2020-07-20 00:00:00 | 2 | 0 | 2020-07-20 00:00:00 | 0 | Produto 2 | 22 | null | null |
  28. | 3 | Jose | 1 | 2020-07-20 00:00:00 | 3 | 0 | 2020-07-20 00:00:00 | 0 | Produto 3 | 33 | null | null |
  29. | 4 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
  30. | 5 | Matias | 0 | 2020-07-19 23:50:40 | 1 | 3 | 2020-07-19 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 33 |
  31. | 6 | Joaozinho | 0 | 2020-07-19 00:00:00 | 1 | 3 | 2020-07-22 00:00:00 | 0 | Produto 1 | 11 | Produto 3 | 22 |
  32. +----------+-----------+--------+---------------------+----------+----------+---------------------+--------+------+-----------+-------+------------------+

我需要在orders表和price列的每个产品(product1,product2..)上使用不同的名称(product1\u name,product2\u name..)留下连接

woobm2wo

woobm2wo1#

  1. select o.*, p1.name, p1.price
  2. from orders o
  3. inner join products p1 on p1.id=o.product1

添加product2应该没那么难,只是作为一种练习。。。

wxclj1h5

wxclj1h52#

你需要两个 join 不是吗 products 表格:

  1. select
  2. o.*,
  3. p1.name p1_name,
  4. p1.price p1_price,
  5. p2.name p2_name,
  6. p2.price p2_price
  7. from orders o
  8. left join products p1 on p1.id = o.product1
  9. left join products p2 on p2.id = o.product2

如果 product1 始终可用,您可以先打开 left join 到一个 inner join ,这使得查询的效率略高。

相关问题