gpt4 book ai didi

mysql - 如何有条件地从 SQL 中的连接表中选择一个字段?

转载 作者:行者123 更新时间:2023-12-04 09:06:43 25 4
gpt4 key购买 nike

SELECT 
title,
description,
status,
task.user_id AS creatorUserId,
(SELECT user.nickname FROM user WHERE user.id = task.user_id) AS creatorUserNickname,
GROUP_CONCAT(user.id, "," ,user.nickname SEPARATOR ";") as responsibleUsers
FROM task JOIN task_user ON task.id = task_user.task_id
JOIN user ON task_user.user_id = user.id
GROUP BY title, description, status, creatorUserId, creatorUserNickname;
上面的查询有效,但我想知道是否有可能在没有子查询的情况下获得相同的结果。
我有一个 任务表 user_id 列 对于创建任务的用户,以及 用户表用户数据,如 昵称 .
然后是 task_user 表映射分配给任务的用户。
我的困惑在于如何获得不同的昵称:一个对应于 task.user_id ,创作者,以及来自 的其他人task_user.user_id ,受让人。
下面的查询不起作用,creatorUserId 和creatorUserNickname 在responsibleUsers 字段上重复,导致单个任务的多行。
SELECT 
title,
description,
status,
task.user_id AS creatorUserId,
user.nickname AS creatorUserNickname,-- this user is referenced in task.user_id
GROUP_CONCAT(user.id,"," ,user.nickname SEPARATOR ";") as responsibleUsers -- these in task_user.user_id
FROM task JOIN task_user ON task.id = task_user.task_id
JOIN user ON task_user.user_id = user.id OR task.user_id = user.id
GROUP BY title, description, status, creatorUserId, creatorUserNickname;
有没有办法选择不同的 用户昵称 基于哪个表引用了他们的 id ?
非常感谢!

最佳答案

您需要 2 次加入 user .
第一个返回创建者的详细信息,第二个返回分配给任务的用户:

SELECT 
t.title,
t.description,
t.status,
u1.user_id AS creatorUserId,
u1.nickname AS creatorUserNickname,
GROUP_CONCAT(u2.id, ',' , u2.nickname SEPARATOR ';') AS responsibleUsers
FROM task t
INNER JOIN task_user tu ON t.id = tu.task_id
INNER JOIN user u1 ON t.user_id = u1.id
INNER JOIN user u2 ON tu.user_id = u2.id
GROUP BY t.title, t.description, t.status, creatorUserId, creatorUserNickname;

关于mysql - 如何有条件地从 SQL 中的连接表中选择一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63427697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com