簡體   English   中英

或INNER JOIN中的條件

[英]Or condition in INNER JOIN

我有一張表,其結構如下(要點):

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)

有什么解決辦法嗎? 謝謝

兩次連接用戶表:

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

用例語句,它將為您提供所有匹配值,而無需限制一個或兩個值

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM