我遇到了一个问题,我希望通过ID加入多个列。
我的第一张表看起来像这样:
submitter_id reviewer_id processor_id
75 34 91
我要加入的表格如下:
id first_name last_name
75 Bob Smith
34 Albert McDonald
91 Joe Blo
我正在尝试创建一个查询,该查询将查看我的第一个表中的每个ID,然后获取每个ID的名字和姓氏。
例如,执行此操作的查询应返回如下内容:
[
75 => "Bob Smith",
34 => "Albert McDonald",
91 => "Joe Blo"
];
有人可以帮我构建一个可以实现此目的的查询吗?谢谢!
答案 0 :(得分:2)
使用不同的别名
连接同一个表3次select t1.submitter_id, t1.reviewer_id, t1.processor_id,
t2.first_name as submitter_firstname, t2.last_name as submitter_lastname,
t3.first_name as reviewer_firstname, t3.last_name as reviewer_lastname,
t4.first_name as processor_firstname, t4.last_name as processor_lastname
from firstTable t1
left join namesTable t2 on t1.submitter_id = t2.id
left join namesTable t3 on t1.reviewer_id = t3.id
left join namesTable t4 on t1.processor_id = t4.id
答案 1 :(得分:0)
我认为你真正想要的更像是这样:
SELECT n.id, CONCAT(n.first_name, ' ', n.last_name)
FROM names n
JOIN ids i
ON n.id = i.submitter_id
OR n.id = i.reviewer_id
OR n.id = i.processor_id
GROUP BY n.id;
这只是进行一次连接,显示您实际想要的2列的记录并限制,因此用户只列出一次。此外,如果用户没有设置名称,您可能不想只返回ID,而您也不想要左连接。
编辑: 如果您需要索引,可以在submitter_id,reviewer_id,processor_id上创建一个索引,如果您需要性能。
答案 2 :(得分:0)
您希望所有内容都在一个结果集中,因此您可以使用UNION ALL
:
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.submitter_id
UNION ALL
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.reviewer_id
UNION ALL
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.processor_id
如果您打算仅为某些群组使用某些条件,我认为这是一种更好的方法,例如where reviewer_id > 100
。如果没有,先生。 Egole更清洁。
答案 3 :(得分:0)
假设您需要在第一个表中使用一行来返回结果中的一行。
SELECT tt.submitter_id , CONCAT(ta.first_name, ' ', ta.last_name) ,
tt.reviewer_id , CONCAT(tb.first_name, ' ', tb.last_name) ,
tt.processor_id , CONCAT(tc.first_name, ' ', tc.last_name)
FROM `transaction` as tt , `names` as ta , `names` as tb , `names` as tc
WHERE tt.submitter_id = ta.id AND
tt.reviewer_id = tb.id AND
tt.processor_id = tc.id
结果将是3个ID,每个事务在一行中具有相应的名称。