Извлекать записи из нескольких таблиц, используя соединение - PullRequest
0 голосов
/ 19 марта 2020

У меня есть три таблицы, такие как " tbl_purchase ", " tbl_user " & " tbl_contestant ". Мне нужны все записи из tbl_purchase с " name " в двух таблицах " tbl_user " & " tbl_contestant ".

Мой запрос,

    SELECT tp.*, tu.* 
       FROM tbl_purchase tp
       INNER JOIN tbl_user tu 
       ON tu.user_id = tp.user_id               

Таблица: tbl_purchase

 +-------+-------------+------+
 | p_id  | user_id     | Star |
 +-------+-------------+------+
 | 1     | 1           | 50   |
 | 2     | 4           | 100  |
 | 3     | 6           | 150  |
 +-------+-------------+------+

Таблица: tbl_user

 +-------+-------------+
 | u_id  | name        |
 +-------+-------------+
 | 1     | Sachin      |
 | 4     | Akshay      |
 +-------+-------------+

Таблица: tbl_contestant

 +-------+-------+-------------+
 | c_id  | u_id  |  Name       |
 +-------+-------+-------------+
 | 1     |   6   |  Mayank     |
 | 2     |   8   |  Nikhil     |
 | 3     |   9   |  Vipul      |
 +-------+-------+-------------+

Я хочу ниже результата,

 +-------+-------+-------------+------+
 | p_id  | u_id  |  Name       | Star |
 +-------+-------+-------------+------+
 | 1     | 1     |  Sachin     | 50   |
 | 2     | 4     |  Akshay     | 100  |
 | 3     | 6     |  Mayank     | 150  |
 +-------+-------+-------------+------+

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Попробуйте SQL запрос:

select p.p_id, u.u_id, u.name, p.star
from tbl_purchase p
inner join (
    select u_id, name from tbl_user
    union
    select u_id, name from tbl_contestant
) u on p.user_id = u.u_id;

Результат:

p_id    u_id    name    star
1       1      Sachin   50
2       4      Akshay   100
3       6      Mayank   150

Объяснение:

  • Ваши пользователи в 2 таблицах - tbl_user и tbl_contestant
  • Итак, вам нужно объединить пользователей, используя UNION (который удаляет дубликаты)
  • Затем вы можете объединиться со своей таблицей покупок

Пример: https://rextester.com/RKHXL43587

0 голосов
/ 19 марта 2020

Попробуйте это. Потому что ваше имя не в одной таблице, поэтому leftJoin как для пользователя, так и для таблицы участника. и как @ Akina сказано в комментарии COALESCE возвращает первое ненулевое значение из списка Ссылка

select tbl_purchase.p_id, 
tbl_purchase.user_id as u_id, 
COALESCE(tbl_user.name, tbl_contestant.Name) as name 
        from tbl_purchase 
        LEFT JOIN tbl_user ON tbl_user.u_id = tbl_purchase.user_id 
        LEFT JOIN tbl_contestant ON tbl_contestant.u_id = tbl_purchase.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...