1

古い SQL コードに内部結合を追加して、より効率的に実行しようとしています。しかし、それらを追加して実行しようとすると、次のエラーが発生します。

1016, Line 12 Outer join operators cannot be specified in a query containing joined tables

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

select a.s_purchase_order as order_id, 
a.order_type, 
a.nobackorder, 
a.order_note, 
a.note, 
a.rqst_dlvry_date, 
b.customer_name ,
c.store_name,
(c.store_name + ',' + isnull(c.address1 + ',', ' ') +  isnull(c.city + ',', ' ') +  isnull(c.state_cd+ ',', ' ')  + isnull( c.zipcode, ' ')) as store_info, 
d.supplier_account
from VW_CustomerOrder a, Customer b, Store c, eligible_supplier d
where a.customer = c.customer
and a.store = c.store
and a.customer = b.customer
and c.customer *= d.customer
and c.store *= d.store
and a.supplier *= d.supplier
and a.purchase_order = @order_id
and a.customer = @customer_id
and a.store=@store_id
and a.supplier = @supplier_id

何が原因ですか?isnullと何か関係があると思いますか?

4

2 に答える 2

1

これを試しましたか?INNER JOINテーブル間のコンマをとに置き換えますLEFT JOIN

select a.s_purchase_order as order_id, 
    a.order_type, 
    a.nobackorder, 
    a.order_note, 
    a.note, 
    a.rqst_dlvry_date, 
    b.customer_name ,
    c.store_name,
    (c.store_name + ',' + isnull(c.address1 + ',', ' ') +  isnull(c.city + ',', ' ') +  isnull(c.state_cd+ ',', ' ')  + isnull( c.zipcode, ' ')) as store_info, 
    d.supplier_account
from VW_CustomerOrder a
INNER JOIN Customer b
    ON a.customer = b.customer
INNER JOIN Store c
    ON a.customer = c.customer
    and a.store = c.store
LEFT JOIN eligible_supplier d
    ON c.customer = d.customer
    and c.store = d.store
    and a.supplier = d.supplier
where a.purchase_order = @order_id
    and a.customer = @customer_id
    and a.store=@store_id
    and a.supplier = @supplier_id
于 2012-08-02T20:05:11.053 に答える
0

ANSI 構文に変換した後に "*=" 結合演算子をコードに残した場合、エラーが説明されます。ANSI 構文を使用する場合は、すべての等値テストに = を使用します。宣言自体で型をJOIN明示する必要があります ( 、、など)。JOININNERLEFTRIGHT

于 2012-08-02T20:50:29.950 に答える