gpt4 book ai didi

mysql - 使用单个 Select 查询从同一列中选择多个值

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:11 24 4
gpt4 key购买 nike

所以,我有两个表:用户和任务;

用户:

 user_id    username    password    first_name  last_name   isAdmin

任务:

 task_id    name    description     assessment  assigned_user_id fk creator_id fk   created_on  last_modified   status

我想做的是用 users 表中的 first_name + last_name 替换 assigned_user_idcreator_id。所以我执行以下查询:

SELECT `task_id`, `description`,`assessment`, 
(SELECT CONCAT(`first_name`, ' ',`last_name`) WHERE `Tasks`.`assigned_user_id` = `Users`.`user_id`) AS assigned_user,
(SELECT CONCAT(`first_name`, ' ',`last_name`) WHERE `Tasks`.`creator_id`=`Users`.`user_id`) AS creator_user,
`created_on`,`last_modified`,`status`
FROM `Tasks`
LEFT JOIN `Users`
ON Tasks.assigned_user_id = Users.user_id
OR Tasks.creator_id = Users.user_id
WHERE task_id=2

问题是它返回 2 行。一种是使用 assigned_user_id null 并填充 creator_id 另一种是相反的方式:

 task_id    description     assessment  assigned_user   creator_user    created_on  last_modified   status
2 SHA SA PII LI 24 NULL Petyo Chuliuv 2016-07-22 2016-07-22 1
2 SHA SA PII LI 24 Gosho Toshov NULL 2016-07-22 2016-07-22 1

问题是:如何返回填充了 assigned_usercreator_user 的单行,我在哪里做错了?提前致谢!

最佳答案

我在 SQL Server 上对此进行了测试,并重现了与您相同的问题,希望能对您有所帮助。

当我进行测试时,两个 SELECT CONCAT 语句都使用相同的 user_id。所以问题似乎不是同时检查两个 id,而是在不同的时间检查两个 id。因此,如果我要使用您的示例,它首先在两个 SELECT CONCAT 语句中使用 Petyo 的 id(仅填充 creator_user 角色,以便另一个变为 false),然后它在两个 SELECT CONCAT 语句中都使用 Gosho 的 id,它也只填充一个字段(assigned_user 字段)并使另一个为空。

所以您需要做的是再次JOIN Users 表。一种用于分配,一种用于创建。像这样的……

SELECT `task_id`, `description`,`assessment`, 
(SELECT CONCAT(`U1.first_name`, ' ',`U1.last_name`)) AS assigned_user,
(SELECT CONCAT(`U2.first_name`, ' ',`U2.last_name`)) AS creator_user,
`created_on`,`last_modified`,`status`
FROM `Tasks`
LEFT JOIN `Users` U1
ON Tasks.assigned_user_id = U1.user_id
LEFT JOIN `Users` U2
ON Tasks.creator_id = U2.user_id
WHERE task_id=2

在你有一个OR之前。它不会查看一侧,查找 id,然后查看另一侧,查找 id,然后立即使用它。正是这样。如果它正在寻找的当前 user_id 恰好是这两者之一,那么它会使用单个 user_id

关于mysql - 使用单个 Select 查询从同一列中选择多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638006/

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