我有以下两张表。
表:用户
user_id username
-- --
1 name1
2 name2
3 name3
表:Rel
user1 user2
-- --
1 2
3 2
1 3
我的目标是像这样检索它:
user1 user2
-- --
name1 name2
name3 name2
name1 name3
请原谅我糟糕的术语和英语。 user1和user2是来自users.user_id的外键,它们一起构成一个复合键。
我可以获得一列如下
SELECT users.username
FROM users
JOIN rel ON rel.user1 = users.user_id
但是当我尝试将它们组合在一起时如上图所示,我无法让它完全正常工作。如果有人有任何建议我会非常感激
答案 0 :(得分:1)
因此,如果您的架构是:
CREATE TABLE Users (user_id int, username varchar(50));
INSERT INTO Users (user_id, username) VALUES (1, 'name1');
INSERT INTO Users (user_id, username) VALUES (2, 'name2');
INSERT INTO Users (user_id, username) VALUES (3, 'name3');
CREATE TABLE Rel (user1 int, user2 int);
INSERT INTO Rel (user1, user2) VALUES (1, 2);
INSERT INTO Rel (user1, user2) VALUES (3, 2);
INSERT INTO Rel (user1, user2) VALUES (1, 3);
您可以使用以下查询:
SELECT u1.username as user1, u2.username as user2
FROM Rel r
JOIN Users u1 ON r.user1 = u1.user_id
JOIN Users u2 ON r.user2 = u2.user_id
- >
+---------+---------+
| user1 | user2 |
|---------+---------|
| name1 | name2 |
| name3 | name2 |
| name1 | name3 |
+---------+---------+
3 rows in set
Time: 0.002s
答案 1 :(得分:0)
你应该真的"只是尝试一下"在问之前。试试这个:
System.out.print(p + "\t" + q + "\t" + (p * q) + "\t");
if(p != q) System.out.println((p + q) + "\t" + (p + q) + "\t" + q);
if((p == q) & (p == 1)) System.out.println(p + "\t0\t0");
if((p == q) & (p == 0)) System.out.println(p + "\t0\t1");
需要注意的一个最重要的部分是你必须使用"表别名"区分第一个连接和第二个连接到同一个表。 " U1"和" u2"是我为这个例子选择的别名。