我在这里有这个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
答案 0 :(得分:0)
您需要进行两次加入,假设UserId
和UpdatedByUserId
不是同一件事:
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.UserId
和tbl_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