簡體   English   中英

根據 ONE 列的值有條件地連接兩個表

[英]Joins with two tables conditionally based on the value of ONE column

我有以下表格來管理物品的購買和問題。

項目表

+---------+-----------+
| 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)但我沒有得到想要的輸出。 我不明白我出了什么問題。 誰能幫我 ?

在您的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

您需要像加入商品一樣加入供應商。 我在 where 子句中根本看不到任何意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM