2

私は参加するのが初めてで、これは途方もなく単純だと確信しています。
クエリで1つの結合を削除すると、削除した結合に関係なく、クエリの残りの部分が機能します。しかし、示されているように、列が存在しないというエラーが表示されます。ポインタはありますか?

select 

loc_carr.address1 as carr_addr1,

loc_cust.address1 as cust_addr1


from db_name.carrier, db_name.customer

join db_name.location as loc_carr on vats.carrier.location_id=loc_carr.location_id

join db_name.location as loc_cust on vats.customer.location_id=loc_cust.location_id

ありがとう

4

2 に答える 2

1

@BobDuellがあなたの問題の解決策を持っています。このエラーが発生する理由をよりよく理解するために、句で、明示的な構文とコンマを使用した暗黙的な結合のFROM両方を使用してテーブルを「結合」することに注意してください。これは(ほぼ)と同等です。ただし、の優先順位はコンマ演算子よりも強力です。したがって、その部分は次のように解析されます。JOIN,CROSS JOINJOIN,

FROM 
  ( db_name.carrier )
  , 
  (   ( db_name.customer
      JOIN db_name.location AS loc_carr 
          ON carrier.location_id = loc_carr.location_id      -- this line
      )                                                      -- gives the error
    JOIN join db_name.location AS loc_cust 
        ON customer.location_id = loc_cust.location_id
  )

上記の行では、そのスコープ(その括弧内)にテーブル vats.carrier.location_idがないため、エラーがスローされます。carrier

于 2012-11-10T22:10:52.007 に答える
1

とテーブルcarrier_idを結合するために使用できるような名前の列があると推測します。その仮定を考慮して、これを試してください:carriercustomer

select 
     loc_carr.address1 as carr_addr1
   , loc_cust.address1 as cust_addr1

from vats.carrier  as a

join vats.customer as b
  on b.carrier_id=a.carrier_id

join vats.location as loc_carr 
  on loc_carr.location_id=a.location_id

join vats.location as loc_cust 
  on loc_cust.location_id=b.location_id

読みやすくするために、テーブル参照にエイリアスを使用していることに注意してください。また、コンマで区切られたテーブルをリストする代わりに、明示的な SQL 結合構文を使用していることにも注意してください。

于 2012-11-10T19:49:23.987 に答える