2011-05-03 184 views
2

我有一个具有以下结构的支付表。需要mysql查询帮助

**Payments** 
id 
name 
created_by - user_id 
closed_by - user_id 

**Users** 
user_id 
name 
surname 

什么是显示创建并关闭付款文件的用户名和姓的最佳方式。

我能想到这可能会使用两个子查询工作的唯一方法(CREATED_BY,closed_by场)感谢

+2

您可以使用JOIN。 – 2011-05-03 06:52:43

+0

JOIN怎么样? – Ruben 2011-05-03 06:52:52

+0

你能给我一个'JOIN'的例子吗? – Contra 2011-05-03 06:58:07

回答

3

试试这个:

SELECT p.id, p.name, 
CONCAT (u1.name,' ', u1.surname) created, 
CONCAT (u2.name,' ', u2.surname) closed, 
FROM payments p INNER JOIN users u1 
ON p.created_by = u1.user_id 
INNER JOIN users u2 
ON p.closed_by = u2.user_id 

编辑:如果你想要的名称和姓分裂

SELECT p.id, p.name, 
u1.name created_name, u1.surname created_surname, 
u2.name closed_name, u2.surname closed_surname, 
FROM payments p INNER JOIN users u1 
ON p.created_by = u1.user_id 
INNER JOIN users u2 
ON p.closed_by = u2.user_id 
+0

我想你误会了我的created_by和closed_by女巫本质上是一个'user_id',但是我需要名字和姓氏的created_by和关闭字段 – Contra 2011-05-03 06:56:42

+0

@Contra:I给你加入了字段...如果你想让他们分开,我要编辑我的帖子... – Marco 2011-05-03 06:58:55

+0

图例这个作品我会谢谢接受stackoverflow允许我(3分钟) – Contra 2011-05-03 07:02:20

1

严格的加盟是不够,我想你ç在where子句中使用加入

select name, surname 
from 
    payments p, users u 
where 
    u.user_id = p.created_by 
    and u.user_id = p.closed_by 
+0

'付款'没有'user_id'列。 – 2011-05-03 06:56:40

+0

我认为这不起作用,如果created_by不同于closed_by。我错了吗? – Marco 2011-05-03 07:01:00

+0

谢谢@spacecowboy – Massimog 2011-05-03 07:06:59

0

您可以多次连接到单个表,但必须使用别名。

select 
p.*,cr.*,cl.* 
from 
payments p 
join users cr 
on p.created_by = cr.user_id 
join users cl 
on p.closed_by = cl.user_id