我没有太多的 SQL 知识,我的工作是创建一个有友谊的基本社交网络。为此,我创建了一个表(有更多列,但为了这个问题我已经删除了它们);
CREATE TABLE USERS
(USER_ID CHAR(8) NOT NULL,
USER_LNAME VARCHAR(20) NOT NULL,
USER_FNAME VARCHAR(20) NOT NULL,
PRIMARY KEY (USER_ID));
我创建了另一个表,您可以在其中插入两个人的 user_id 并生成他们成为朋友的时间。
CREATE TABLE USERFRIEND
(USER_ID CHAR(8) NOT NULL,
FRIEND_ID CHAR(8) NOT NULL,
EST_DATE TIMESTAMP NOT NULL,
PRIMARY KEY (USER_ID, FRIEND_ID),
FOREIGN KEY (USER_ID) REFERENCES USERS (USER_ID),
FOREIGN KEY (FRIEND_ID) REFERENCES USERS (USER_ID));
插入任一表的数据都没有任何问题。例如,这是我插入的数据示例(我的实际数据库大约有 15 个朋友)
INSERT INTO USERS
VALUES ('10000001', 'Jones', 'Tom');
INSERT INTO USERS
VALUES ('10000002', 'Smith', 'Michael');
INSERT INTO USERS
VALUES ('10000003', 'Johnson', 'Andrew');
INSERT INTO USERS
VALUES ('10000004', 'Williams', 'David');
和友谊
INSERT INTO USERFRIEND
VALUES ('10000001', '100000002', CURRENT_TIMESTAMP);
INSERT INTO USERFRIEND
VALUES ('10000001', '100000003', CURRENT_TIMESTAMP);
INSERT INTO USERFRIEND
VALUES ('10000002', '100000004', CURRENT_TIMESTAMP);
其中一项任务是获取一个人的朋友列表。
例如,Michael smith 将与 Tom Jones 和 David Williams (01, 04) 成为朋友 我的问题是,在一个友谊中,Michael 是 user_id,而在另一个朋友中
到目前为止,我得出的最好结果就是这段代码;
SELECT user_id, friend_id
FROM USERFRIEND
WHERE USER_ID = 10000002
OR FRIEND_ID = 10000002;
这至少返回了 Smith (10000002) 是朋友的所有人的 ID 的结果,但是当 USER_ID 和 FRIEND_ID 都引用相同的东西时,我不确定如何让它与这些人的相关姓名一起返回。
SELECT DISTINCT a.user_fname, a.user_lname, b.USER_ID, b.FRIEND_ID
FROM USERS a, USERFRIEND b
WHERE b.USER_ID = 10000002
OR b.FRIEND_ID = 10000002;
我已经尝试过这段代码,虽然在我的数据库中,只有 20 个友谊,它返回 80 个结果,并且没有一个名称正确匹配。
希望你们中的一个人能为我找到(可能很简单)的解决方案,因为我不知道我应该做什么。