MySQL连接来自两列的两个表
问题描述:
我要连接两个包含另一个表中的两列的表。MySQL连接来自两列的两个表
表用户
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
我知道我的查询有问题,但我不知道如何解决它。
答
你可能想使用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
答
试试你的加入像
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
+0
@AdamPlocher是,纠正它感谢 – 2013-03-22 04:59:47
答
而是加入的,尽量使用子查询这个样子。
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
谢谢。这是我需要的答案。 – otezz 2013-03-22 09:12:02