0

関連する質問がウェブ上にたくさんあることは知っています。最初の回答は GOOGLE です。最初の回答は必要ないので、2 番目の回答をいただければ幸いです。

私は4つのテーブルを持っています:

支払い、InvoiceItem、ユーザー、アイテム

関係 :

支払い.InvoiceItem_Id <-> InvoiceItem.InvoiceItemId

支払い.User_Id <->ユーザー.UserID

InvoiceItem .Item_Id <->アイテム.ItemsId

Payment.InvoiceItem_Idは NULLABLE であるため、InvoiceItems のない支払いがあります

クエリは次のとおりです。

 
    SELECT 
        Payment.Id,
        Payment.User_Id,
        Payment.InvoiceItem_Id,
        User.Name,
        Items.Name
    FROM
        Payment
            LEFT OUTER JOIN
        InvoiceItem ON Payment.InvoiceItem_Id = InvoiceItem.InvoiceItemId
            INNER JOIN
        User ON Payment.User_Id = User.UserID
            INNER JOIN
        Items ON InvoiceItem.Items_Id = Items.ItemsId
    WHERE Payment.User_Id = 724;

3 番目の INNER JOIN を LEFT OUTER に変更すると、Payment からすべてのレコードが取得されますが、3 番目の INNER JOIN がInvoiceItem .Item_Id <-> Items .ItemsIdの間にあるため、変更する必要がある理由がわかりません。これらをテーブルに。

前もって感謝します。

4

1 に答える 1

0

Invoice に外部結合を残した後、Invoice アイテムで Inner Join を実行するには、すべての Invoice アイテムが存在している必要があるため、Invoice の左結合を事実上無効にします。

于 2013-07-09T12:51:14.540 に答える