MySQL从两列连接两个表

时间:2013-03-22 04:55:40

标签: mysql

我要加入两个表,其中两列包含另一个表中的id。

表用户

id | first_name | last_name |
---+------------+-----------+
 1 | John       | Doe       |
 2 | Jane       | Doe       |
 3 | Some       | Name      |

表格印章

id |    date    | applicant_id  | app_by_id |
---+------------+---------------+-----------+
 1 | 2013-03-15 | 1             | 2         |
 2 | 2013-03-10 | 2             | 3         |
 3 | 2013-03-13 | 2             | 1         |

我想要展示的内容:

    date    | applicant | app_by    |
------------+-----------+-----------+
 2013-03-15 | John Doe  | Jane Doe  |
 2013-03-10 | Jane Doe  | Some Name |
 2013-03-13 | Jane Doe  | John Doe  |

我的查询:

SELECT CONCAT_WS(' ', NULLIF(t1.first_name, ' '), NULLIF(t1.last_name, ' ')) AS applicant,
    CONCAT_WS(' ', NULLIF(t1.first_name, ' '), NULLIF(t1.last_name, ' ')) AS app_by,
    t2.date
    FROM users t1
    INNER JOIN stamp t2 ON applicant_id = t1.id

我知道我的查询有问题,但我不知道如何修复它。

3 个答案:

答案 0 :(得分:0)

尝试加入

SELECT  CONCAT_WS(' ', NULLIF(u1.first_name, ' '), NULLIF(u1.last_name, ' ')) AS applicant,
        CONCAT_WS(' ', NULLIF(u2.first_name, ' '), NULLIF(u2.last_name, ' ')) AS app_by,
        s.date
FROM    stamp s INNER JOIN
        user u1 ON  s.applicant_id = u1.id INNER JOIN
        user u2 ON  s.app_by_id = u1.id

答案 1 :(得分:0)

尝试使用像这样的子查询而不是连接。

SELECT date, 
(SELECT CONCAT_WS(' ', NULLIF(first_name, ' '), NULLIF.last_name, ' ')) from USERS WHERE id = s.applicant_id) as applicant, 
(SELECT CONCAT_WS(' ', NULLIF(first_name, ' '), NULLIF.last_name, ' ')) from USERS WHERE id = s.app_by_id) as app_by 
from stamp s

答案 2 :(得分:0)

您可能希望使用LEFT JOIN,以便即使其他连接条件失败,您也可以在每列中获取值。以下代码也适用于常规JOIN

SELECT s.date,
CONCAT_WS(' ', NULLIF(u1.first_name, ' '), NULLIF(u1.last_name, ' ')) AS applicant,
CONCAT_WS(' ', NULLIF(u2.first_name, ' '), NULLIF(u2.last_name, ' ')) AS app_by
FROM stamp s
LEFT JOIN users u1 ON s.applicant_id = u1.id
LEFT JOIN users u2 ON s.app_by_id = u2.id

证明:http://sqlfiddle.com/#!2/39aff/1/0