或INNER JOIN中的条件

时间:2017-03-20 09:08:14

标签: php mysql sql

我的表格结构如下(点):

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)

任何解决方案?感谢

2 个答案:

答案 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);