连接具有2个条件的2个表(MySQL和PHP)

时间:2019-09-27 05:45:55

标签: php mysql sql

我有2个表:users和prov_spec_search。我正在寻找符合以下条件的SQL查询以联接这些表:

users Table:

id | first_name | last_name | activ_status
-------------------------------------------
6  | sudha      | dravid    |    1
7  | Gokul      | menon     |    1
13 | sujith     | nair      |    1
-------------------------------------------

prov_spec_search表

id | inv_user_id | drafter_id | activ_status
-------------------------------------------
1  | 13          | 7          |    1
2  | 13          | 6          |    1
-------------------------------------------

预期结果是:

Need to join users and prov_spec_search tables with 2 conditions where 

prov_spec_search.inv_user_id = users.id = Name

      AND 

prov_spec_search.drafter_id = users.id = Drafter name

结果:

Name       |   Drafter Name   | Active
------------------------------------------
sujit nair |   Gokul menon    |  active
sujit nair |   sudha dravid   |  active

我已经开始使用此查询:

SELECT
prov_spec_search.id,
prov_spec_search.inv_user_id,
prov_spec_search.drafter_id,
prov_spec_search.activ_status,
users.first_name,
users.last_name,
users.activ_status AS activ_status1
FROM prov_spec_search
INNER JOIN users ON prov_spec_search.inv_user_id = users.id AND prov_spec_search.drafter_id = users.id
WHERE (prov_spec_search.activ_status ='1')

2 个答案:

答案 0 :(得分:2)

您需要从prov_spec_search表连接到users表,两次

SELECT
    pss.id,
    pss.inv_user_id,
    pss.drafter_id,
    pss.activ_status,
    CONCAT(u1.first_name, ' ', u1.last_name) AS Name,
    CONCAT(u2.first_name, ' ', u2.last_name) AS Drafter_Name
FROM prov_spec_search pss
LEFT JOIN users u1
    ON pss.inv_user_id = u1.id
LEFT JOIN users u2
    ON pss.drafter_id = u2.id
WHERE
    pss.activ_status = 1;
    -- you may filter user and drafter names here if desired

enter image description here

Demo

答案 1 :(得分:1)

您需要两次连接users表:一次用于Name,一次用于Drafter Name

    SELECT CONCAT(n.first_name, ' ', n.last_name) as Name,
    CONCAT(d.first_name, ' ', d.last_name) as Drafter_Name,
    p.activ_status as Active
    FROM prov_spec_search p
    JOIN user n ON p.inv_user_id = n.id
    JOIN user d ON p.drafter_id = d.id
    WHERE p.activ_status = 1

请注意,我假设您从其他地方获得了状态Active = 1,但我相信您可以毫无问题地将其添加到上面的查询中。