У меня есть эта база данных с пользователями и отношениями.Я просто хочу показать username
, firstName
и lastName
всех отношений, в которых присутствует какой-то определенный (текущий зарегистрированный пользователь) userID
. Как мне это сделать?
Этомоя лучшая попытка
SELECT
UserRelationship.relationshipType,
UserRelationship.userFirstID, UserRelationship.userSecondID,
[User].username, [User].firstName, [User].lastName
FROM
[User]
INNER JOIN
UserRelationship ON [User].userID = UserRelationship.userFirstID
AND UserRelationship.relationshipType = 'friends'
OR [User].userID = UserRelationship.userSecondID
AND UserRelationship.relationshipType = 'friends'
WHERE
([User].userID = @userID)
Возвращает все отношения, кроме имени пользователя, имени и фамилии текущего пользователя.
Это мои таблицы:
CREATE TABLE [dbo].[UserRelationship]
(
[userFirstID] INT NOT NULL,
[userSecondID] INT NOT NULL,
[initiatedBy] NVARCHAR (50) NOT NULL,
[relationshipType] NVARCHAR (50) NOT NULL,
CONSTRAINT [PK_UserRelationship]
PRIMARY KEY CLUSTERED ([userFirstID] ASC, [userSecondID] ASC),
CONSTRAINT [FK_UserRelationship_userFirstID]
FOREIGN KEY ([userFirstID]) REFERENCES [dbo].[User] ([userID]),
CONSTRAINT [FK_UserRelationship_initiatedBy]
FOREIGN KEY ([initiatedBy]) REFERENCES [dbo].[User] ([username]),
CONSTRAINT [CK_UserRelationship_relationshipType]
CHECK ([relationshipType]='pending' OR [relationshipType]='friends')
);
и
CREATE TABLE [dbo].[User]
(
[userID] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (50) NOT NULL,
[firstName] NVARCHAR (50) NULL,
[lastName] NVARCHAR (50) NULL,
[dateOfBirth] DATE NULL,
[city] NVARCHAR (50) NULL,
[address] NVARCHAR (50) NULL,
[phoneNumber] INT NULL,
[email] NVARCHAR (50) NULL,
[rank] NVARCHAR (50) NULL,
[profilImage] NVARCHAR (255) NULL,
PRIMARY KEY CLUSTERED ([userID] ASC),
CONSTRAINT [AK_User_username]
UNIQUE NONCLUSTERED ([username] ASC)
);
В моей таблице UserRelationship
я храню все отношения, всегда проверяя, что userFirstID
меньшечем userSecondID
.Таким образом, у меня есть только 1 запись на отношение.