0

CurrentProducts、SalesInvoice、SalesInvoiceDetail の 3 つのテーブルに参加しようとしていました。SalesInvoiceDetail には、他の 2 つのテーブルと他のいくつかの列への FK/外部キーが含まれています。最初のクエリは問題ありませんが、2 番目のクエリはそうではありません。私の質問はコードの最後にあります。

select *
from CurrentProducts inner join 
(dbo.SalesInvoiceDetail inner join dbo.SalesInvoice
 on dbo.SalesInvoiceDetail.InvoiceID = dbo.SalesInvoice.InvoiceID
)
on dbo.SalesInvoiceDetail.ProductID = dbo.CurrentProducts.ProductID

違う

select *
from CurrentProducts inner join 
(select * from
dbo.SalesInvoiceDetail inner join dbo.SalesInvoice
 on dbo.SalesInvoiceDetail.InvoiceID = dbo.SalesInvoice.InvoiceID
)
on dbo.SalesInvoiceDetail.ProductID = dbo.CurrentProducts.ProductID

エラー - キーワード「on」付近の構文が正しくありません。

2 番目のクエリが間違っているのはなぜですか? コンセプト的には最初のものと同じではありませんか?つまり、結合によって結果セットが作成されます。* 結果セットを選択し、この結果セットを CurrentProducts ? に結合します。

4

2 に答える 2

1

内部クエリをエイリアスする必要があります。また、最初のものでは括弧は必要ありません。

select *
from CurrentProducts inner join 
(select * from
dbo.SalesInvoiceDetail inner join dbo.SalesInvoice
 on dbo.SalesInvoiceDetail.InvoiceID = dbo.SalesInvoice.InvoiceID
) A
on A.ProductID = dbo.CurrentProducts.ProductID
于 2013-05-13T10:28:21.633 に答える
1

最初のクエリは、古い構文で表現された「プレーンな」結合です。次のように書き換えることができます。

select
  *
from
  CurrentProducts
  inner join dbo.SalesInvoiceDetail
             on dbo.SalesInvoiceDetail.ProductID = dbo.CurrentProducts.ProductID
  inner join dbo.SalesInvoice
             on dbo.SalesInvoiceDetail.InvoiceID = dbo.SalesInvoice.InvoiceID

2 番目のクエリは、2 番目のテーブルがサブクエリである結合です。サブクエリに参加するときは、エイリアスを割り当て、そのエイリアスを使用して、サブクエリによって返される列を参照する必要があります。

select
  *
from
  CurrentProducts
  inner join (select *
              from dbo.SalesInvoiceDetail
              inner join dbo.SalesInvoice
                         on SalesInvoiceDetail.InvoiceID = SalesInvoice.InvoiceID
  ) as foo on foo.ProductID = dbo.CurrentProducts.ProductID
于 2013-05-13T10:29:14.777 に答える