2个sql查询有什么区别?

raj*_*aju 0 sql oracle

我有2个SQL查询,其中一个工作,但另一个给出错误.以下查询效果很好

select /*ordered*/ coupon_address.coupon,merchant_address.id  
from merchant_address, 
     coupon_address, 
     customers c  
WHERE merchant_address.id = coupon_address.merchant_address 
  and c.CUSTOMER_ID = 'temp1' 
  AND sdo_within_distance(c.cust_geo_location,merchant_address.store_geo_location,'distance = 1 unit=MILE') = 'TRUE';
Run Code Online (Sandbox Code Playgroud)

但是以下查询不起作用并给出错误

select /*ordered*/ coupon_address.coupon,merchant_address.id  
from  coupon_address, 
      customers c 
  JOIN merchant_address ON merchant_address.id=coupon_address.merchant_address
 WHERE c.CUSTOMER_ID = 'temp1' 
   AND sdo_within_distance (c.cust_geo_location,merchant_address.store_geo_location, 'distance = 1 unit=MILE') = 'TRUE';
Run Code Online (Sandbox Code Playgroud)

错误是

第1行的错误:ORA-00904:"COUPON_ADDRESS"."MERCHANT_ADDRESS":标识符无效

sag*_*agi 6

不要将显式和隐式连接语法混合在一起!它们总会导致混乱和错误:

select /*ordered*/ coupon_address.coupon,merchant_address.id
FROM coupon_address
JOIN merchant_address
  ON merchant_address.id=coupon_address.merchant_address
JOIN customers c ON c.CUSTOMER_ID = 'temp1'
WHERE  sdo_within_distance (c.cust_geo_location,
                            merchant_address.store_geo_location, 
                           'distance = 1 unit=MILE') = 'TRUE';
Run Code Online (Sandbox Code Playgroud)

它不起作用的原因是解析器评估查询的顺序.可能未知列的表尚未评估.