【问题标题】:How to use use join to replace foreign key relationship MySQLMySQL如何使用join替换外键关系
【发布时间】:2019-03-28 06:52:47
【问题描述】:

我正在尝试进行一个从两个表中检索数据的简单查询。一个表 ForumPosts 保存与论坛中的帖子有关的数据,另一个表 Users 保存有关我系统上用户的数据。

我遇到的问题是,当我想收集有关哪些用户发布了哪些帖子的数据时。

这是我的桌子:

mysql> select * from ForumPosts;
+----+--------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------+
| ID | UserID | Title                                                                       | Post                                                                                                                                       | ImgFile | SubmissionTime      |
+----+--------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------+
|  1 |      1 | More tests                                                            | tests...                                                                                                          | NULL    | 2019-02-26 01:39:28 |
|  2 |      2 | Another test post                          | tests...                                               | NULL    | 2019-02-26 22:52:26 |
|  3 |      1 | Test post                                      | tests…                                                                                   | NULL    | 2019-03-27 22:10:38 |
+----+--------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------+
mysql> select * from Users;
+----+----------------+----------+----------+---------------------+
| ID | Email          | UserName | Password | DateRegistered      |
+----+----------------+----------+----------+---------------------+
|  1 | test@test.com  | tester   | dank     | 2019-02-26 22:43:26 |
|  2 | test2@test.com | 2tester  | dank     | 2019-02-26 22:43:26 |
+----+----------------+----------+----------+---------------------+

我曾尝试查看其他一些帖子,例如: Simple MySQL Join to replace foreign key 他们似乎都和我有同样的问题,但我似乎找不到我的解决方案有什么问题。

这是我当前正在使用的查询。

select 
    Title, 
    Users.ID as Author, 
    SubmissionTime as Posted 
from ForumPosts
left join 
    Users on ForumPosts.UserID = Users.ID
order by SubmissionTime desc;

但是返回的是这样的:

mysql> select 
    ->     Title, 
    ->     UserId as Author, 
    ->     SubmissionTime as Posted 
    -> from ForumPosts
    ->     left join 
    ->     Users on ForumPosts.UserID = Users.ID
    -> order by SubmissionTime desc;
+-----------------------------------------------------------------------------+--------+---------------------+
| Title                                                                       | Author | Posted              |
+-----------------------------------------------------------------------------+--------+---------------------+
| Test post                                      |      1 | 2019-03-27 22:10:38 |
| Another test post                         |      2 | 2019-02-26 22:52:26 |
| More tests                                                            |      1 | 2019-02-26 01:39:28 |
+-----------------------------------------------------------------------------+--------+---------------------+

结果列出了用户的外键,但我想要他们关联的用户名。

我觉得这应该是一个非常简单的修复,但我似乎找不到它。

【问题讨论】:

  • 如果你想要用户名,那么这就是你应该放在选择列表中的内容,而不是id......这与外键无关。

标签: mysql join left-join


【解决方案1】:

在 select 语句中添加Users.UserName,,如下所示

select 
    Title, 
    Users.UserName,
    Users.ID as Author, 
    SubmissionTime as Posted 
from ForumPosts
left join 
    Users on ForumPosts.UserID = Users.ID
order by SubmissionTime desc;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多