是否有一个复杂的选择查询来解决这个问题
Posted
技术标签:
【中文标题】是否有一个复杂的选择查询来解决这个问题【英文标题】:Is there a complicated select query to solve this problem 【发布时间】:2019-08-22 18:22:07 【问题描述】:我需要对一个表进行查询,在这个查询中我想在 corsspde 用户“first_name”的值中替换“created_by”的值 因为一个用户创建了另一个用户,所以我想返回创建者的真实姓名而不是他的 id
我试图深入了解查询类型,但查询类型太多了,内连接、外连接、左连接、变量...... 我不知道哪个概念是解决方案[在此处输入图片描述]
【问题讨论】:
【参考方案1】:您将从该表执行 INNER JOIN 回到自身:
SELECT users.*, createdby.*
FROM yourtable users
INNER JOIN yourtable createdby
ON users.created_by = createdby.id
为了做到这一点,FROM
子句中的每个表都获得了一个别名。我们第一次使用它时,我称它为users
,第二次我称它为createdby
。这使得在 SQL 的其余部分中很明显正在引用哪个表以及为什么。
我们将第一个表的created_by
连接到第二个表的id
。本质上,第二个表包含created_by
用户的属性。
您只需将yourtable
替换为您的实际表名,并可能将这些*
替换为您想要从每个表中获取的实际字段。
【讨论】:
哦,谢谢,但我需要完成它:我的 uset 表有列“create_by”,我想用另一个值返回这个列,而不是返回创建用户的 id当前用户,我想返回其他值,例如“first_name”,你能帮我解决一下这样的查询吗或作为新变量 我试过 thsis ,但它不起作用 SELECT user.id , user.first_name, REPLACE(create_by,(select u.first_name from users as u where user.create_by=u. id)) AS create_by FROM users as user 恐怕我不明白你想要什么。请根据您粘贴为图像的示例数据重写您的问题并提供所需的结果。【参考方案2】:这应该由客户端代码而不是查询来处理,因为它会导致混淆。如果你真的想要它,你可以只取 first_name 列值并将其作为 create_by 返回,如下所示:
SELECT first_name AS create_by FROM user;
【讨论】:
以上是关于是否有一个复杂的选择查询来解决这个问题的主要内容,如果未能解决你的问题,请参考以下文章