3

我有一个包含用户信息(fname、lname...等)的用户表和一个发票表。在 invoices 表中,我有一个名为 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 查询的好书有任何建议,那也会很有帮助。

4

1 回答 1

4

您需要在 table 上加入userstable 两次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
于 2012-09-29T01:56:54.190 回答