Как мне объединить 3 таблицы в mysql - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужна помощь здесь

У меня есть 3 таблицы, которые выглядят так:

user_base_info
+-------+-----------+------------------+------------------+------------------+------------------+
|user_id| real_name |    live_province |   live_city      | live_area_big    | live_area_small  |
+-------+-----------+------------------+------------------+------------------+------------------+
|    1  |  John     |      15000000    |    15300000      |    15310000      |    15310003      |
|    2  |  Susan    |      42000000    |    42140000      |    42140400      |    42140401      |
|    3  |  Andy     |      12000000    |    58300000      |    58302000      |    58302004      |
|    4  |  Knoxvile |      12000000    |    12100000      |    12110000      |    12110002      |
|    5  |  Abraham  |      13000000    |    50200000      |    50200000      |    11115007      |
|  ...  |  ........ |      ...         |    ...           |    ...           |    ...           |
|331508 |  Donald   |      41000000    |    41010000      |    41011200      |    41011202      |
+-------+-----------+------------------+------------------+------------------+------------------+

borrow_progress
+--------+-----------+------------+------------+-------------+
|user_id | borrow_id |  state     |  remark    | create_time |
+--------+-----------+------------+------------+-------------+
|  170   |  236      |  10        |  waiting   |  24/04/17   |   
|  170   |  236      |  22        |  proceed   |  02/02/17   |     
|  170   |  236      |  26        |  success   |  25/04/17   |    
|  170   |  236      |  30        |  sent      |  05/11/17   |   
|  172   |  237      |  40        |  completed |  03/07/17   |   
|  ...   |  ...      |  ...       |  ...       |    ...      |   
| 353252 | 24112     |  90        |  failed    |  30/01/17   |   
+--------+-----------+------------+------------+-------------+

area
+------------+---------------------+
|code        |      name           |
+------------+---------------------+
| 11000000   | Jawa Tengah         |   
| 12000000   | Jawa Barat          |     
| 13000000   | Jawa Timur          |    
| 14000000   | Sumatera Utara      |   
| 15000000   | DKI Jakarta         |   
|  ...       |  ...                |   
| 41000000   | Di Yogyakarta       |  
| 42140000   | Kota Singkawang     | 
| 58300000   | Kota Depok          | 
| 12100000   | Bandung             | 
| 50200000   | Kabupaten Sukoharjo | 
| 41010000   | Kabupaten Sleman    | 
| 15310000   | Cilandak            | 
| 42140400   | Singkawang Barat    | 
| 41011200   | Mlati               | 
| 12110000   | Arjasari            | 
| 15310003   | Gandaria Selatan    | 
| 41011202   | Sinduadi            |   
+------------+---------------------+

Я хочу выбрать пользователя в таблице user_base_info, который имеет состояние = 90, в таблице loan_progress и изменить код live_province, live_city, live_area_big, live_area_small с именем в области таблицы.

Я хочу, чтобы результат выглядел следующим образом:

+-------+-----------+------------------+------------------+------------------+------------------+
|user_id| real_name |    live_province |   live_city      | live_area_big    | live_area_small  |
+-------+-----------+------------------+------------------+------------------+------------------+
|331508 |  Donald   |   Di Yogyakarta  | Kabupaten Sleman |    Mlati         |    Sinduadi      |
+-------+-----------+------------------+------------------+------------------+------------------+

Я пытался

SELECT 
    *
FROM
    borrow_progress a
        INNER JOIN
    user_base_info b ON a.user_id = b.user_id
        INNER JOIN
    area c ON c.code = b.live_city
WHERE
    state = 90

Но это не то, чего я хочу.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы должны присоединить 4 копии таблицы area к двум другим таблицам. Каждая копия area будет возвращать имя для каждого из 4 столбцов: live_province, live_city, live_area_big и live_area_small:

select u.user_id, u.real_name,
  a1.name live_province,
  a2.name live_city,
  a3.name live_area_big,
  a4.name live_area_small
from user_base_info u
inner join borrow_progress b on b.user_id= u.user_id
inner join area a1 on a1.code = u.live_province
inner join area a2 on a2.code = u.live_city
inner join area a3 on a3.code = u.live_area_big
inner join area a4 on a4.code = u.live_area_small
where b.state = 90

Если существует случай, когда столбцы live_province, live_city, live_area_big и live_area_small в таблице user_base_info должны быть null, затем использовать соединения left вместо соединений inner. Смотрите демо . Результаты:

| user_id | real_name | live_province | live_city        | live_area_big | live_area_small |
| ------- | --------- | ------------- | ---------------- | ------------- | --------------- |
| 331508  | Donald    | Di Yogyakarta | Kabupaten Sleman | Mlati         | Sinduadi        |
0 голосов
/ 07 февраля 2020

Попробуйте это:

SELECT 
    b.user_id
    , b.real_name
    , (select c1.name from area c1 where code = a.live_province) "live_province"
    , live_city      
    , (select c2.name from area c2 where code = a.live_area_big) "live_area_big"
    , (select c3.name from area c3 where code = a.live_area_big) "live_area_small"  
FROM borrow_progress a 
INNER JOIN user_base_info b ON a.user_id = b.user_id
INNER JOIN area c ON c.code = b.live_city
WHERE state = 90
...