MySQL嵌套加入

时间:2012-09-29 01:53:10

标签: mysql sql join

我有一个用户表,其中包含用户信息(fname,lname ...等)和发票表。在发票表中,我有一个名为created_id的字段,该字段链接到创建发票的user.id.我还有一个名为staff_id的字段,该字段链接到批准发票的工作人员user.id。

如何在单个查询中查询created_id和staff_id的名字和姓氏?以下是我尝试过的一些事情......

SELECT  
    invoices.*,
    users.fname as created_fname,
    users.lname as created_lname
FROM
    invoices
INNER JOIN users
    ON users.id = invoices.created_id;

这样可行,但它只能获取创建发票的人名。我怎样才能将员工的姓名添加到......

SELECT 
    invoices.*, 
    users.fname as created_fname, 
    users.lname as created_lname,
    users2.fname as staff_fname,
    users2.lname as staff_lname
FROM invoices, users
LEFT JOIN
    invoices,
    users AS users2
ON
    users.id = invoices.created_id,
    users.id = users2.id

这不起作用,但更接近。任何指导或示例都会非常有用。此外,如果您对学习如何进行更高级的MySQL查询的好书有任何建议,那么这些建议也很有帮助。

1 个答案:

答案 0 :(得分:4)

您需要在表users上两次加入Invoice表。

SELECT  a.*,
        b.fname created_firstName,
        b.lname created_LastName,
        c.fname staff_firstName,
        c.lname staff_LastName      
FROM    Invoice a
        INNER JOIN users b
            ON a.created_id = b.id
        INNER JOIN users c
            ON a.staff_id = c.id

最好的是你可以使用CONCAT

将他们的名字连接成一个
SELECT  a.*,
        CONCAT(b.fname, ' ', b.lname) created_fullName,
        CONCAT(c.fname, ' ', c.lname) staff_fullName        
FROM    Invoice a
        INNER JOIN users b
            ON a.created_id = b.id
        INNER JOIN users c
            ON a.staff_id = c.id