我对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)成为朋友。我的问题是,在一个友谊中,迈克尔是user_id,在另一个友谊中,friend_id
到目前为止,我得出的最好结果是这段代码。
SELECT user_id, friend_id
FROM USERFRIEND
WHERE USER_ID = 10000002
OR FRIEND_ID = 10000002;
这至少返回了Smith(10000002)与之成为朋友的所有ID的结果,但是当USER_ID和FRIEND_ID都引用相同的内容时,我不确定如何用这些人的相关名称返回此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个结果,并且没有一个名称正确匹配。
希望你们中的一个能为我找到(可能很简单)的解决方案,因为我不知道我应该做什么。
由于两个表之间没有联接,因此上面的查询产生了笛卡尔乘积。您应该至少有n-1个联接,其中n是使用的表数。
您可以像这样连接两个表-
SELECT DISTINCT a.user_fname, a.user_lname, b.USER_ID, b.FRIEND_ID
FROM USERS a, USERFRIEND b
WHERE a.user_id=b.user_id
or a.user_d=b.friend_id
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句