-1

我想将多个查询合并为 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)


我想让每个字段用户 ID 将在另一个表中选择 fname 字段

4

1 回答 1

0

这是一种方法:

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 JOINs 转为LEFT JOINs。

或者,您可以进行条件聚合。假设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
于 2020-02-26T16:59:22.783 回答