2

我是新加入的,我相信这非常简单。
如果我删除查询中的一个联接,则查询的其余部分将起作用,无论我删除哪个联接。但如图所示,它给出了错误说该列不存在。任何指针?

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

我猜测有一个名为类似的列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 回答
1

@Bob Duell 可以解决您的问题。为了更好地理解为什么会产生这个错误,请注意在子句中,您使用显式语法和隐式连接使用逗号FROM“连接”表:(几乎)相当于 a 。然而 of 的优先级强于逗号运算符。因此,该部分解析如下: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 回答