Craig Dennis
Craig Dennis

Reputation: 13

MYSQL: How do select column depending on data from another table?

i have three tables:

Technician - which contains data of the name of tech and which stock provider they get their stock from

Stock order - the list of items that they have ordered

Stock code - a list of the name of the items and the different codes depending on the provider.

What i am trying to do run a query that selects the relevant product code depending on which provider the technician gets his stock from as per the outcome table below

Could anyone help me please.

thanks in advance.

Tables

Technician

+-------------+----------------+
| Technician  | Stock Supplier |
+-------------+----------------+
| Bob Jones   | Provider 1     |
| Erika Jones | Provider 1     |
| Steve Jones | Provider 2     |
+-------------+----------------+

Stock Order


+-------------+-----------------------+-------------------+
|  Tech Name  |     Product Name      |     Category      |
+-------------+-----------------------+-------------------+
| Bob Jones   | WURTH PASTE GREY      | CONSUMABLES       |
| Bob Jones   | RADIANT WAX           | VALETING PRODUCTS |
| Bob Jones   | TELESCOPIC MAGNET     | HARDWARE          |
| Steve Jones | TELESCOPIC MAGNET     | HARDWARE          |
| Steve Jones | SAFETY GLASSES (PREP) | HARDWARE          |
| Erika Jones | ENGINE OIL 1L         | MAINTENANCE ITEMS |
| Erika Jones | WURTH VAKU 50 FILLER  | CONSUMABLES       |
+-------------+-----------------------+-------------------+

Stock codes




+-------------------+-----------------------------------+-------------------------+-------------------------+----------+-------+
|     CATEGORY      |               ITEM                | PROVIDER 1 PRODUCT CODE | PROVIDER 2 PRODUCT CODE | QUANTITY | PRICE |
+-------------------+-----------------------------------+-------------------------+-------------------------+----------+-------+
| VALETING PRODUCTS | RADIANT WAX                       | CON.46105               | 46101                   |        1 |  4.92 |
| CONSUMABLES       | WURTH PASTE BLACK                 | 8932801                 | 8932801                 |        1 | 21.44 |
| CONSUMABLES       | WURTH PASTE GREY                  | 8932802                 | 8932802                 |        1 | 21.44 |
| CONSUMABLES       | WURTH PLASTIC CLEANER             | 8935001                 | 8935001                 |        1 | 12.99 |
| CONSUMABLES       | WURTH VAKU 50 FILLER              | 89260501                | 89260501                |        1 | 14.95 |
| MAINTENANCE ITEMS | ENGINE OIL 1L                     | 521772392               | 521772392               |        1 |  5.63 |
| MAINTENANCE ITEMS | RED ANTIFREEZE (65 PLATE ONWARDS) | 523770482               | 523770482               |        1 |   2.3 |
| HARDWARE          | TELESCOPIC MAGNET                 | 553777300               | 60370                   |        1 |  2.32 |
| HARDWARE          | SAFETY GLASSES (PREP)             | 3M2720S                 | 15SC                    |        1 |  2.83 |
| HARDWARE          | SAFETY GLASSES (OVER SPECTACLES)  | 3M2800                  | 15SC                    |        1 |  3.06 |
| PPE               | SIZE 9 MECHANIC STYLE GLOVES      | GRE.30305509            | 303-MAT-PR              |        1 |  1.48 |
+-------------------+-----------------------------------+-------------------------+-------------------------+----------+-------+



Outcome



+-------------+-----------------------+-------------------+-----------+
|  Tech Name  |         Name          |     Category      |   Code    |
+-------------+-----------------------+-------------------+-----------+
| Bob Jones   | WURTH PASTE GREY      | CONSUMABLES       | 8932802   |
| Bob Jones   | RADIANT WAX           | VALETING PRODUCTS | CON.46105 |
| Bob Jones   | TELESCOPIC MAGNET     | HARDWARE          | 553777300 |
| Steve Jones | TELESCOPIC MAGNET     | HARDWARE          | 60370     |
| Steve Jones | SAFETY GLASSES (PREP) | HARDWARE          | 15SC      |
| Erika Jones | ENGINE OIL 1L         | MAINTENANCE ITEMS | 521772392 |
| Erika Jones | WURTH VAKU 50 FILLER  | CONSUMABLES       | 89260501  |
+-------------+-----------------------+-------------------+-----------+

Upvotes: 0

Views: 53

Answers (1)

Dark Knight
Dark Knight

Reputation: 6541

Use CASE WHEN to do conditional pickup for code, based on value of stock_supplier from technician table.

SELECT 
    so.tech_name 'Tech Name',
    so.product_name Name,
    so.category Category,
    CASE t.stock_supplier
        WHEN 'Provider 1' THEN sc.PROVIDER_1_PRODUCT_CODE
        WHEN 'Provider 2' THEN sc.PROVIDER_2_PRODUCT_CODE
    END AS Code
FROM stock_order so
INNER JOIN technician t ON so.tech_name = t.technician
INNER JOIN stock_codes sc ON so.product_name = sc.item;

Upvotes: 1

Related Questions