Проблемы с самостоятельным соединением SQL - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть 2 таблицы, из которых мне нужно получить данные ... Моя таблица пользователей выглядит следующим образом:

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 ссылается на UserID в таблице Users, как и AlternateUserID. Это тот случай, когда в нашей программе могут быть пользователи, которые «альтернативны» другим пользователям. Таким образом, в приведенном выше примере, если у Джона Брауна будут Марка и Тима в качестве заместителей, а у Марка будет Джон в качестве заместителя, а у Времени - Марка и Джона в качестве заместителей. Я рисую бланк о том, как написать SQL, чтобы показать альтернативным пользователям для данного идентификатора пользователя. Поэтому, если я передам UserID = 1, он вернет:

2, Mark, Smith
3, Tim, Stone

Я попробовал это, но он возвращает 2 строки с одинаковыми пользовательскими данными (в данном случае 2 Джона Брауна):

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

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012
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 голос
/ 14 февраля 2012

У вас неверный псевдоним таблицы:

WHERE ua.UserID = @UserID

Примечание: ua not u.

1 голос
/ 14 февраля 2012

Как насчет чего-то вроде

SELECT  u.*
FROM    UserAlternates ua   INNER JOIN
        Users u ON  ua.AlternateUserID = u.UserID
WHERE   ua.UserID = @UserID 

Из вашего запроса не следует, что вам нужно дважды присоединиться к таблице «Пользователи», поскольку таблица UserAlternates уже содержит исходный идентификатор пользователя.

0 голосов
/ 14 февраля 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...