Выберите многократный запрос, и каждый запрос получил 2 JOIN - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу объединить несколько запросов в 1:

SELECT b.fname FROM almanak as a
    JOIN users as b on (b.userid = a.staf1)

SELECT c.fname FROM almanak as a
    JOIN users as c on (c.userid = a.staf2)

SELECT d.fname FROM almanak as a
    JOIN users as d on (d.userid = a.staf3)

SELECT e.fname FROM almanak as a
    JOIN users as e on (e.userid = a.staf4)

SELECT f.fname FROM almanak as a
    JOIN users as f on (f.userid = a.staf5)


Я хочу, чтобы каждое поле userid выбрало поле fname в другой таблице

1 Ответ

0 голосов
/ 26 февраля 2020

Вот один из способов сделать это:

SELECT 
    b.fname fname1, 
    c.fname fname2, 
    d.fname fname3,
    e.fname fname4,
    f.fname fname5
FROM almanak as a
INNER JOIN users as b ON b.userid = a.staf1
INNER JOIN users as c ON c.userid = a.staf2
INNER JOIN users as d ON d.userid = a.staf3
INNER JOIN users as e ON e.userid = a.staf4
INNER JOIN users as f ON f.userid = a.staf5

Если могут отсутствовать отношения, вы можете включить INNER JOIN s в LEFT JOIN s.

В качестве альтернативы вы можете можно сделать условную агрегацию. Предполагая, что первичный ключ таблицы almanak равен id, он будет выглядеть следующим образом:

SELECT
    MAX(CASE WHEN u.userid = a.staf1 THEN u.fname END) fname1,
    MAX(CASE WHEN u.userid = a.staf2 THEN u.fname END) fname2,
    MAX(CASE WHEN u.userid = a.staf3 THEN u.fname END) fname3,
    MAX(CASE WHEN u.userid = a.staf4 THEN u.fname END) fname4,
    MAX(CASE WHEN u.userid = a.staf5 THEN u.fname END) fname5
FROM almanak as a
INNER JOIN users as u 
    ON u.userid IN (a.staf1, a.staf2, a.staf3, a.staf4, a.staf5)
GROUP BY a.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...