admin

将 id 替换为 MySQL 中 CROSS JOIN 中另一个表中的用户名

sql

我想扩展以下查询:

SELECT 
    d.dataid,
    d.colors,
    u.userid,
    u.username
FROM
    users u
        CROSS JOIN
    datas d
WHERE
    (u.userid , d.dataid) NOT IN (SELECT 
            c.userid, c.dataid
        FROM
            collections c)
        AND u.userid = 1

对于这个数据样本:

table datas                 table users          table collections
dataid | colors  | addedby  userid | username    collectionid | userid | dataid
--------------------------  -------------------  ------------------------------
   1   | blue    |    1       1    | Brian            1       |    1   |   1
   2   | red     |    1       2    | Jason            2       |    2   |   3
   3   | green   |    2       3    | Marie            3       |    1   |   3
   4   | yellow  |    3                               4       |    3   |   2

这些结果是预期的:

for Brian           
dataid | colors | userid | username
-----------------------------------
   2   | red    |   1    | Brian
   4   | yellow |   1    | Marie

for Jason
dataid | colors | userid | username
-----------------------------------
   1   | blue   |   2    | Brian
   2   | red    |   2    | Brian
   4   | yellow |   2    | Marie

添加了从用户继承用户 ID 的行“ addedby”。目前,我的查询用用户名替换了来自用户的用户 ID,而不是来自数据的 addedby。我真的需要替换数据中的用户 ID,而不是用户的用户 ID。:-)

有谁知道如何解决这个问题?

提前致谢!


阅读 158

收藏
2021-07-01

共1个答案

admin

只需使用数据表再次加入用户表。并在输出中使用此连接中的用户名。

SELECT 
    d.dataid,
    d.colors,
    uo.userid,
    uo.username
FROM
    users u
        CROSS JOIN
    datas d
INNER JOIN
    users uo
ON d.added_by = uo.id

WHERE
    (u.userid , d.dataid) NOT IN (SELECT 
            c.userid, c.dataid
        FROM
            collections c)
        AND u.userid = 1

而且我相信,你甚至可以这样写你的查询

SELECT u.userid, u.username, d.dataid, d.colors

FROM username u
INNER JOIN datas d
   ON u.userid = d.addedby

WHERE d.dataid NOT IN (
   SELECT dataid 
   FROM collections
   WHERE userid = 1
)
2021-07-01