加入两张id的两张单人桌

时间:2014-11-10 13:43:09

标签: mysql

我在这里有这个MySql查询:

    SELECT 
    tbl_News.NewsId, 
    tbl_News.UserId, 
    tbl_News.NewsTitle, 
    tbl_News.NewsText, 
    tbl_News.NewsDateTime,
    tbl_News.NewsUpdatedDateTime,
    tbl_News.IsDisabled, tbl_Users.UserId,
    tbl_Users.UserId AS CreatedByUserId,
    tbl_Users.UserId AS UpdatedByUserId,
    tbl_Users.Username As CreatedByUsername,
    tbl_Users.Username as UpdatedByUsername

FROM tbl_News 
INNER JOIN tbl_Users ON tbl_News.UserId = tbl_Users.UserId
AND tbl_News.UpdatedByUserId = tbl_Users.UserId

我正在尝试将此连接到我的tbl_Users表,我已经使用了UserId两次并给它们一个不同的别名,我不是试图使用别名来对两个标签进行内连接。但是我没有取得任何成功,也不确定我所做的是否是正确的方法。任何关于此的帮助/建议都会很棒

我遇到的问题是我需要返回创建者的用户名和更新者的用户名,因为他们将是两个不同的ID

2 个答案:

答案 0 :(得分:0)

您需要进行两次加入,假设UserIdUpdatedByUserId 不是同一件事

SELECT 
    tbl_News.NewsId, 
    tbl_News.UserId, 
    tbl_News.NewsTitle, 
    tbl_News.NewsText, 
    tbl_News.NewsDateTime,
    tbl_News.NewsUpdatedDateTime,
    tbl_News.IsDisabled, tbl_Users.UserId,
    u1.UserId AS CreatedByUserId,
    u2.UserId AS UpdatedByUserId,
    u1.Username As CreatedByUsername,
    u2.Username as UpdatedByUsername

FROM tbl_News 
INNER JOIN tbl_Users u1 ON 
    tbl_News.UserId = u1.UserId
INNER JOIN tbl_Users u2 ON
    tbl_News.UpdatedByUserId = u2.UserId

您正在做什么:抓取tbl_News中的所有行,然后将其加入tbl_users,其中tbl_Users.UserId等于两者 tbl_News.UserIdtbl_News.UpdatedByUserId。这似乎......很奇怪。为什么在连接条件中都包括两者?

您尝试做的事情:获取tbl_News的所有行,然后获取创建所述新闻项目并更新所述新闻项目的用户的用户名。这需要两个连接。你可以不止一次加入一张桌子 - 没关系。在这种情况下,tbl_Users会使用不同的上下文,因此您可以获得在u1中创建新闻的用户,然后您可以获得在u2中更新新闻的用户。

答案 1 :(得分:0)

您正在使用JOIN从同一个表用户获取已创建的用户和更新的用户详细信息,这将无效。您需要将用户表加入2次

SELECT 
n.NewsId, 
n.UserId, 
n.NewsTitle, 
n.NewsText, 
n.NewsDateTime,
n.NewsUpdatedDateTime,
n.IsDisabled, 
n.UserId AS CreatedByUserId,
n.UpdatedByUserId AS UpdatedByUserId,
u1.Username As CreatedByUsername,
u2.Username as UpdatedByUsername
FROM tbl_News n
JOIN tbl_Users u1 ON u1.UserId = n.UserId 
join tbl_Users u2 on u2.UserId = n.UpdatedByUserId
相关问题