根据ONE列的值有条件地联接两个表

时间:2018-11-12 11:24:20

标签: mysql sql

我有下表管理商品的购买和发行。

项目表

+---------+-----------+
| item_id | item_name |
+---------+-----------+
|     500 | A4        |
|     501 | A5        |
|     502 | B5        |
|     503 | B4        |
|     504 | A3        |
+---------+-----------+

供应商表

+-------------+---------------+
| sup_id      | supplier_name |
+-------------+---------------+
|           1 | ABC Suppliers |
|           2 | DEF Suppliers |
|           3 | GHI Suppliers |
+-------------+---------------+

官员表

+------------+--------------+
| officer_id | officer_name |
+------------+--------------+
|          1 | Jhon         |
|          2 | William      |
|          3 | Ken          |
|          4 | Robert       |
+------------+--------------+

购买/问题表

+-----------+---------+---------+---------+------------+-----+-------------+
| update_id | bill_no | sup_id  | item_id |    date    | qty |    type     |
+-----------+---------+---------+---------+------------+-----+-------------+
|      1000 |      10 |       1 |     500 | 2018-11-01 |  50 | purchase    |
|      1001 |      40 |       1 |     500 | 2018-11-02 |  25 | purchase    |
|      1002 |      32 |       2 |     500 | 2018-11-04 |  10 | issue       |
|      1003 |      25 |       3 |     500 | 2018-11-05 |  12 | issue       |
|      1004 |      14 |       1 |     500 | 2018-11-08 |  22 | purchase    |
|      1005 |      55 |       2 |     501 | 2018-11-09 |  10 | purchase    |
|      1006 |      30 |       2 |     502 | 2018-11-10 |  40 | purchase    |
+-----------+---------+---------+---------+------------+-----+-------------+

02)购买/发行表通过在表末尾提及“类型”来保存购买明细和发行明细。

03)我需要获得以下输出。

+-----------+------------------------------+------------+-----+------------+
| item_name | supplier_name / officer_name |    date    | qty |type        |
+-----------+------------------------------+------------+-----+------------+
| A4        | ABC Suppliers                | 2018-11-01 |  50 | purchase   |
| A4        | ABC Suppliers                | 2018-11-02 |  25 | purchase   |
| A4        | William                      | 2018-11-04 |  10 | issue      |
| A4        | Ken                          | 2018-11-05 |  12 | issue      |
| A4        | ABC Suppliers                | 2018-11-08 |  22 | purchase   |
| A5        | DEF Suppliers                | 2018-11-09 |  10 | purchase   |
| B5        | DEF Suppliers                | 2018-11-10 |  40 | purchase   |
+-----------+------------------------------+------------+-----+------------+

03)我使用了以下查询

select item.item_name, 
       supplier.supplier_name, 
       purchase.date, 
       purchase.qty, 
       purchase.type 
from purchase 
join item on item.item_id = purchase.item_id
where supplier.sup_id in (select sup_id from supplier)

04)但是我没有得到想要的输出。我不明白我要怎么做。谁能帮我吗?

2 个答案:

答案 0 :(得分:1)

SELECT子句中,您引用的是supplier表,而没有加入该表。现在,您似乎想在购买类型为officer_name时显示issue,否则在supplier_name时显示purchase

我们可以对两个表都使用LEFT JOIN,并使用CASE .. WHEN来确定各自的名称。

我删除了WHERE .. IN子查询,该子查询在这里似乎没有任何作用。

select item.item_name, 
       CASE purchase.type 
         WHEN 'purchase' THEN supplier.supplier_name 
         WHEN 'issue' THEN officer.officer_name 
       END AS `supplier_name_officer_name`
       purchase.date, 
       purchase.qty, 
       purchase.type 
from purchase 
join item on item.item_id = purchase.item_id 
left join supplier on purchase.sup_id = supplier.sup_id 
left join officer on purchase.sup_id = officer.officer_id

答案 1 :(得分:0)

您需要像加入商品一样加入供应商。 而且我在where子句中一点都看不到。