嵌套查询中的SQL限制、排序和联接
我有一个疑问:嵌套查询中的SQL限制、排序和联接,sql,Sql,我有一个疑问: Select VENDOR, CODE, TABOF.OFID,DATEI,DATEF,VARR,VARRT,DESEXT from ( Select A_IND,A_COD,A_DES,A_FX,A_ML, OFID,DATEI,DATEF,VARR,VARRT,FLAGD,VENDOR from ANTAB join TABOF on (ANTAB.A_COD = TABOF
Select VENDOR, CODE, TABOF.OFID,DATEI,DATEF,VARR,VARRT,DESEXT
from (
Select A_IND,A_COD,A_DES,A_FX,A_ML,
OFID,DATEI,DATEF,VARR,VARRT,FLAGD,VENDOR
from ANTAB
join TABOF
on (ANTAB.A_COD = TABOF.VENDOR)
where
A_FX <> '' and A_ML <> '' and
A_DES <> '' and A_COD <> '' and
A_IND <> '' and
A_FX < (47.7 + 0.5) and
A_FX > (47.7 - 0.5) and
A_ML < (15.5 + 0.5) and
A_ML > (15.5 - 0.5)
order by
sqrt(power((A_FX - 47.7),2) +
power((A_ML - 15.5),2))
limit 1
)
join OF_MNTAB
on (OF_MNTAB.OFID = OFTAB.OFID)
where
DATEI <= getdate() and
DATEF >= getdate() and
OFTAB.FLAGD = 0 and
CODE not in ('MANU','TRAN') and
VENDOR = A_COD
order by DATEI desc
但当我尝试执行它时,它总是给我错误:
限制附近的语法错误,如果我删除限制选项,它会在下一行的连接附近给我语法错误。。
我是一个sql noob,这对我来说是一个复杂的问题。。
我做错了什么?不能在子查询中使用限制。而您错过了内联视图的别名
Select VENDOR, CODE, TABOF.OFID,DATEI,DATEF,VARR,VARRT,DESEXT
from (
Select A_IND,A_COD,A_DES,A_FX,A_ML,
OFID,DATEI,DATEF,VARR,VARRT,FLAGD,VENDOR
from ANTAB
join TABOF
on (ANTAB.A_COD = TABOF.VENDOR)
where
A_FX <> '' and A_ML <> '' and
A_DES <> '' and A_COD <> '' and
A_IND <> '' and
A_FX < (47.7 + 0.5) and
A_FX > (47.7 - 0.5) and
A_ML < (15.5 + 0.5) and
A_ML > (15.5 - 0.5)
order by
sqrt(power((A_FX - 47.7),2) +
power((A_ML - 15.5),2))
) OFTAB
join OF_MNTAB
on (OF_MNTAB.OFID = OFTAB.OFID)
where
DATEI <= getdate() and
DATEF >= getdate() and
OFTAB.FLAGD = 0 and
CODE not in ('MANU','TRAN') and
VENDOR = A_COD
order by DATEI desc
根据第251页的说明,您可以使用TOP,而不是LIMIT。因此,删除限制1并添加顶部1:
正如@chetan正确指出的那样,还缺少一个别名 MySQL?神谕SQL Server?并不是所有的DBMS都有LimitAdaptiveServer,我认为您可以使用SELECT Top1。。。TOP是SQL的Sybase/SQL Server扩展,而不是LIMIT 1,LIMIT 1是MySQL扩展。这是SQL Anywhere限制,不能在子查询中使用LIMIT吗?
Select VENDOR, CODE, TABOF.OFID,DATEI,DATEF,VARR,VARRT,DESEXT
from (
Select TOP 1
A_IND,A_COD,A_DES,A_FX,A_ML,
OFID,DATEI,DATEF,VARR,VARRT,FLAGD,VENDOR
...