【发布时间】:2016-07-22 16:33:48
【问题描述】:
我有 2 个 sql 表
CREATE TABLE users(userID INTEGER PRIMARY KEY AUTOINCREMENT, alias TEXT NOT NULL)
CREATE TABLE friends(userID1 INTEGER, userID2 INTEGER, PRIMARY KEY(userID1, userID2))
当 2 个用户想成为朋友时,我通过在 friends 表中插入一行来创建一个新的关系 btw 2。该行中 2 个朋友的 userID 的顺序无关紧要,但无论顺序如何,它都应该是唯一的。
问题 1: 我的第二张桌子目前没有反映我想要的。我的意思是我可以做到这一点,虽然我不希望这样,但这很好:
INSERT INTO friends VALUES(1,2);
INSERT INTO friends VALUES(2,1);
是否可以在我的 sql 表中强制执行此约束,或者如果还没有反向顺序的关系,我应该使用查询进行检查。
问题 2: 例如,如果我有 userID,获取朋友列表(userID 和 alias)的最佳 sql 查询是什么? :
INSERT INTO users VALUES(1, 'A');
INSERT INTO users VALUES(2, 'B');
INSERT INTO users VALUES(3, 'C');
INSERT INTO users VALUES(4, 'D');
INSERT INTO friends VALUES(1, 2);
INSERT INTO friends VALUES(2, 3);
INSERT INTO friends VALUES(4, 1);
INSERT INTO friends VALUES(2, 4);
我想要:
For userID=1: (2, B) and (4, D)
For userID=2: (1, A), (3, C) and (4, D)
For userID=3: (2, B)
For userID=4: (1, A) and (2, B)
额外问题:我可以改进表格以更好地反映我想要的吗?
非常感谢!
【问题讨论】:
-
很好的问题,框架很好