3

ユーザー情報 (fname、lname... など) と請求書テーブルを含むユーザー テーブルがあります。請求書テーブルには、請求書を作成した user.id にリンクする created_id というフィールドがあります。請求書を承認したスタッフの user.id にリンクする staff_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

userstable で table を 2 回結合する必要があります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

一番いいのは、名前を 1 つに連結できることです。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 に答える