【发布时间】:2015-04-07 08:30:57
【问题描述】:
我的数据库中的 N:N 表有问题。我使用以下 stackoverflow 问题来帮助我解决这个问题:
How to make SQL many-to-many same-type relationship table
我有一个用户的概念,这些用户可以维护一个朋友列表。我创建了以下 2 个表:
CREATE TABLE [dbo].[Users] (
[UserId] UNIQUEIDENTIFIER NOT NULL,
[UserName] NVARCHAR (50) NOT NULL,
[Password] NVARCHAR (88) NOT NULL,
[E-Mail] NVARCHAR (100) NOT NULL,
[First Name] NVARCHAR (50) NOT NULL,
[Last Name] NVARCHAR (50) NOT NULL,
[Description] NVARCHAR (2000) NULL,
PRIMARY KEY CLUSTERED ([UserId] ASC)
);
GO
CREATE TABLE [dbo].[Friends]
(
[Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
[UserId] UNIQUEIDENTIFIER NOT NULL,
[FriendId] UNIQUEIDENTIFIER NOT NULL
)
GO
然后我运行了以下更改查询:
ALTER TABLE Friends ADD FOREIGN KEY (userid) REFERENCES Users (userid);
ALTER TABLE Friends ADD FOREIGN KEY (friendid) REFERENCES Users (userid);
我运行了以下 INSERT 查询:
INSERT INTO Friends
VALUES (NEWID(), 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82', '6CD2EC21-C32B-4EC3-B221-E36E2A887EA0');
最后我运行了这个查询来尝试检索信息:
SELECT *
FROM Users u
INNER JOIN Friends f ON u.userid = f.userid
INNER JOIN Friends f ON u.userid = f.friendid
WHERE
(f.userid = 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82' OR f.friendid = 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82')
AND u.userid != 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82';
这会出现以下错误:
Msg 1011, Level 16, State 1, Line 4
The correlation name 'f' is specified multiple times in a FROM clause.
我明白为什么会出现此错误,但我所做的任何更改都导致无法从数据库中检索到任何记录,谁能解释我做错了什么?
谢谢
编辑 1:
根据第一条评论:
SELECT *
FROM Users u
INNER JOIN Friends f1 ON u.userid = f1.userid
INNER JOIN Friends f2 ON u.userid = f2.friendid
WHERE
(f1.userid = 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82' OR f2.friendid = 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82')
AND u.userid != 'AC30D0BB-3462-4D87-A132-62BE6EBA8E82';
什么都不检索。
编辑 2: 基本上我正在尝试检索给定用户的所有朋友。是否有可能我的表格设置不正确或我的数据无效?我的用户表中有 3 个用户,其中一个用户 ID 为 AC30D0BB-3462-4D87-A132-62BE6EBA8E82。
【问题讨论】:
-
将它们命名为 f1 和 f2。
标签: sql sql-server azure