【问题标题】:SQL get users details by ids from other tableSQL 通过其他表中的 id 获取用户详细信息
【发布时间】:2021-05-03 15:18:31
【问题描述】:

我无法通过 CONCAT first_namelast_namecreated_byedited_by 列获取帖子表的数据从用户表。 这是表格:

CREATE TABLE posts
(
  id    varchar(300),
  title     varchar(300),
  created_by    varchar(300),
  edited_by     varchar(255)
);
id title created_by edited_by
1 lorem 1 2
2 ipsum 1 1
3 lorem ipsum 2 2
CREATE TABLE users
(
     id     varchar(300),
     first_name     varchar(300),
     last_name  varchar(300),
        varchar(255)
);
id first_name last_name
1 john doe
2 will smith

现在我想选择帖子表并制作如下所示的输出

id title created_by edited_by
1 lorem john doe will smith
2 ipsum john doe john doe
3 lorem ipsum will smith will smith

问题是我想用用户的名字和姓氏更改帖子表中的 id。我试过这个查询:

SELECT 
  A.id,
  A.title,
  CONCAT(B.first_name, ' ', B.last_name) created_by,
  CONCAT(B.first_name, ' ', B.last_name) edited_by
FROM posts A
INNER JOIN users B ON A.created_by = B.id 

【问题讨论】:

  • 到底是什么问题?你写了什么查询?它会出现什么问题?
  • 问题是我想用用户的名字和姓氏更改帖子表中的 id。我试过这个查询 SELECT A.id, A.title, CONCAT(B.first_name, ' ', B.last_name) created_by, CONCAT(B.first_name, ' ', B.last_name)edited_by FROM 帖子 A INNER JOIN users B ON A.created_by = B.id
  • 好的,我已编辑您的请求以将信息放在那里。如 MtwStark 所示,您必须加入用户表两次。而且我不会使用任意别名。它们使查询难以阅读。例如,将p 用于postsuusers,而不是ab

标签: mysql sql express mariadb


【解决方案1】:

你需要JOINusers表两次:

SELECT A.id, A.title, CONCAT(B.first_name, ' ', B.last_name) created_by, CONCAT(C.first_name, ' ', C.last_name) edited_by 
FROM posts A 
INNER JOIN users B ON A.created_by = B.id
INNER JOIN users C ON A.edited_by = C.id

【讨论】:

  • @MtwStark 。 . .您应该学会使用有意义的表别名而不是任意字母。
  • @GordonLinoff 我知道并且我使用它,我只是遵循问题中示例的相同架构
猜你喜欢
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2016-04-05
  • 2015-12-26
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多