Объединяется с двумя таблицами условно на основе значения ОДНОГО столбца - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть следующие таблицы для управления покупками и выдачей предметов.

пункт Таблица

+---------+-----------+
| 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 голосов
/ 12 ноября 2018

Вам нужно присоединиться к поставщику так же, как вы сделали для этого предмета. И я вообще не вижу смысла в предложении where.

0 голосов
/ 12 ноября 2018

В вашем предложении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...