我有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":标识符无效
不要将显式和隐式连接语法混合在一起!它们总会导致混乱和错误:
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)
它不起作用的原因是解析器评估查询的顺序.可能未知列的表尚未评估.