如何使用使用join替换外键关系MySQL

时间:2019-03-28 06:52:47

标签: mysql join left-join

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

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

这是我的桌子:

functionB
create function functionA(
    @Type nvarchar(max) 
    , @isArray bit = 0
)
returns @tempTable table (
    FieldId nvarchar(4000)
    , FieldName nvarchar(4000)
    , FieldType nvarchar(4000)
    , IsArray bit)
as
begin
    declare @tempTableA table (
        FieldId nvarchar(4000)
        , FieldName nvarchar(4000)
        , FieldType nvarchar(4000)
        , IsArray bit) 

    insert @tempTableA 
    select 
        *
    from 
        TableA
    where 
            @isArray = 1 and @Type='TypeA'

    insert @tempTable 
    select * from functionB(@tempTableA)

    return 

end
go

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

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

create function functionB(
    --How to get the table variable from functionA?
    @tempTableA table
)
returns @tempTableB table (
    FieldId nvarchar(4000)
    , FieldName nvarchar(4000)
    , FieldType nvarchar(4000)
    , IsArray bit)
as
begin
    insert @tempTableB
    select 
        FieldId [Id]
            , FieldName [Name]
            , FieldType [Type]
            , IsArray Array
    from 
        @tempTableA

    return 

end
go

但是返回的是:

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 |
+----+--------+-----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------+

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

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

1 个答案:

答案 0 :(得分:0)

在如下所示的选择语句中添加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;