我有两个表需要从中获取数据...我的用户表看起来像这样:
Users Table
-------------
UserID
FirstName
LastName
WebLogin
WebPassword
Active
UserAlternates Table
---------------------
UserAlternateID
UserID
AlternateUserID
Users Table Data
------------------
1, John, Brown, jbrown, jbrown, true
2, Mark, Smith, msmith, msmith, true
3, Tim, Stone, tstone, tstone, true
UsersAlternate Table Data
--------------------------
1, 1, 2
2, 1, 3
3, 2, 1
4, 3, 2
5, 3, 1
UserID引用了Users表中的UserID,AlternateUserID也是如此。在这种情况下,我们的程序可以拥有与其他用户“交替”的用户。所以在上面的例子中,如果John Brown有Mark&蒂姆作为替代者,马克将约翰作为替补,而时间将马克和约翰作为替补。我在如何编写SQL以显示给定用户标识的备用用户时画了一个空白。因此,如果我传入UserID = 1,它将返回:
2, Mark, Smith
3, Tim, Stone
我尝试了这个,但它返回了2行相同的用户数据(在这种情况下,2 John Brown's):
CREATE PROCEDURE [dbo].[GetUserAlternates]
@UserID int
AS
SELECT u.FirstName, u.LastName, ua.AlternateUserID
FROM Users u
INNER JOIN UserAlternates ua ON u.UserID = ua.AlternateUserID
WHERE u.UserID = @UserID
有什么想法吗?
答案 0 :(得分:2)
CREATE PROCEDURE dbo.GetUserAlternates
@UserID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT u.FirstName, u.LastName, u.UserID
FROM dbo.Users AS u
INNER JOIN dbo.UserAlternates AS au
ON u.UserID = ua.AlternateUserID
WHERE ua.UserID = @UserID; -- key difference here!
END
GO
答案 1 :(得分:1)
像
这样的东西SELECT u.*
FROM UserAlternates ua INNER JOIN
Users u ON ua.AlternateUserID = u.UserID
WHERE ua.UserID = @UserID
由于UserAlternates表已经包含原始UserID,因此您的请求似乎不需要两次加入Users表。
答案 2 :(得分:1)
你有错误的表别名:
WHERE ua.UserID = @UserID
注意: ua 不是你。
答案 3 :(得分:0)
SELECT ua.AlternateUserID, U2.FirstName, U2.Lastname
FROM Users u
INNER JOIN UserAlternates ua ON u.UserID = ua.UserID
INNER JOIN Users U2 on U2.UserID = UA.AlternateUserID
WHERE u.UserID = @UserID