我的表格结构如下(点):
id1 | id2 | p1 | p2
1 3 5 7
3 1 2 4
1 2 1 7
另一个表格如下(用户):
id | name
1 User1
2 User2
3 User3
所以现在,我需要一个指定ID的查询(例如3),查询检查ID出现在列id1和id2中,如果它出现在两列中的一列中,它会让我回到用户名,选择的行中包含id1和id2。因此,例如,如果我具体说明了ID 3,那么查询会回复:
name1 | name2 | p1 | p2
User1 User3 5 7
User3 User1 2 4
我尝试了各种解决方案,但没有办法做到这一点,我认为我需要INNER JOIN中的OR条件,但我不知道它是否可能,如果它是解决方案......我在这里找不到任何东西。
我的意思是:
INNER JOIN users ON (users.id = points.id1) || (users.id = points.id2)
任何解决方案?感谢
答案 0 :(得分:1)
加入用户表两次:
SELECT u1.name, u2.name, p.p1, p.p2
FROM points p
JOIN users u1 ON u1.id = p.id1
JOIN users u2 ON u2.id = p.id2
WHERE u1.id = 3 OR u2.id = 3
答案 1 :(得分:0)
用例语句它将为您提供所有匹配值,不需要限制一个或两个值
CREATE TABLE points (id1 int(2), id2 int(2), p1 int(2), p2 int(2));
INSERT INTO points VALUES(1,3,5,7);
INSERT INTO points VALUES(3,1,2,4);
INSERT INTO points VALUES(1,2,1,7);
CREATE TABLE users (id int(2), name char(23));
INSERT INTO users VALUES(1,'user1');
INSERT INTO users VALUES(2,'user2');
INSERT INTO users VALUES(3,'user3');
SELECT (CASE WHEN u.id = p.id1 THEN u.name END) AS name1,
(CASE WHEN u1.id = p.id2 THEN u1.name END) AS name2,
p1, p2
FROM points p
INNER JOIN users u ON (u.id = p.id1)
INNER JOIN users u1 ON (u1.id = p.id2);