Sql 在Sybase DB中获取Union子查询的语法错误

Sql 在Sybase DB中获取Union子查询的语法错误,sql,union,sybase,Sql,Union,Sybase,我们有一个包含以下数据的table ta_服务 参考id序列描述 2340 1服务1 2340 2报价1 2340 3服务2 2340 4报价2 2340 5服务3 2340 5服务4 我们需要获取提供服务的服务,除了Ref_id(外键)和seq(主键)列之外,我们没有获取此数据的任何参考 我们试图通过以下查询获取,但失败 SELECT * FROM ta_service WHERE Ref_id = 2340 AND seq IN ( SELECT seq-1 AS seq

我们有一个包含以下数据的table ta_服务

参考id序列描述 2340 1服务1
2340 2报价1
2340 3服务2
2340 4报价2
2340 5服务3
2340 5服务4

我们需要获取提供服务的服务,除了Ref_id(外键)和seq(主键)列之外,我们没有获取此数据的任何参考

我们试图通过以下查询获取,但失败

SELECT * FROM ta_service
WHERE Ref_id = 2340 AND seq IN ( 
    SELECT seq-1 AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND desc LIKE '%Offer%'
UNION 
    SELECT seq AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND desc LIKE '%Offer%'
        ORDER BY seq) 

我们正在使用sybase数据库。感谢任何帮助

假设您使用的是ASE,您的
订购人
需要跳出子查询

•子查询不能在内部操纵其结果,即子查询不能包含order by子句、compute子句或into关键字


假设您使用的是ASE,您的
orderby
需要跳出子查询

•子查询不能在内部操纵其结果,即子查询不能包含order by子句、compute子句或into关键字


您应该按删除
订单,并将
desc
括在
中,因为它是关键字

SELECT * FROM ta_service
WHERE Ref_id = 2340 
AND seq IN ( 
    SELECT seq-1 AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND "desc" LIKE '%Offer%'
UNION 
    SELECT seq AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND "desc" LIKE '%Offer%'
    ) 

您应该按
删除
订单,并将
desc
括在
中,因为它是关键字

SELECT * FROM ta_service
WHERE Ref_id = 2340 
AND seq IN ( 
    SELECT seq-1 AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND "desc" LIKE '%Offer%'
UNION 
    SELECT seq AS seq
    FROM ta_service
    WHERE Ref_id = 2340
    AND "desc" LIKE '%Offer%'
    ) 

ASE在任何子查询中都不支持联合


您可以在任何子查询中引用ASE不支持UNION


您可以参考我刚才提到的12.5 SQL手册中的ASE不支持子查询中的UNION。在第5章第169页,它说“不能在子查询中包含for browse子句或union”。另一个答案是正确的,即使与智商有关。我本来会留下评论的,但我的帐户不允许这样做。

ASE不支持子查询中的联合,正如我刚才提到的12.5 SQL手册所确认的那样。在第5章第169页,它说“不能在子查询中包含for browse子句或union”。另一个答案是正确的,即使与智商有关。我本想留下一条评论,但我的帐户不允许这样做。

这里是sybase手册的链接,上面说子查询中不支持UNION:

但是我注意到,如果在派生表表达式中有union子句,那么它就可以正常工作。以下是指向sybase手册的链接,其中给出了查询的语法:

下面给出了失败和正常查询的示例:

模拟用例:从部门D1或D2中获取员工

查询失败:

SELECT empname from emp WHERE deptid IN 
(SELECT deptid from dept WHERE deptid = "D1"
UNION
SELECT deptid from dept WHERE deptid = "D2")

Working query:  With additional select and derived table based on union:

SELECT empname from emp WHERE deptid IN (
SELECT deptid FROM 
(SELECT deptid from dept WHERE deptid = "D1"
UNION
SELECT deptid from dept WHERE deptid = "D2") derivedTable
)

以下是指向sybase手册的链接,其中指出子查询中不支持UNION:

但是我注意到,如果在派生表表达式中有union子句,那么它就可以正常工作。以下是指向sybase手册的链接,其中给出了查询的语法:

下面给出了失败和正常查询的示例:

模拟用例:从部门D1或D2中获取员工

查询失败:

SELECT empname from emp WHERE deptid IN 
(SELECT deptid from dept WHERE deptid = "D1"
UNION
SELECT deptid from dept WHERE deptid = "D2")

Working query:  With additional select and derived table based on union:

SELECT empname from emp WHERE deptid IN (
SELECT deptid FROM 
(SELECT deptid from dept WHERE deptid = "D1"
UNION
SELECT deptid from dept WHERE deptid = "D2") derivedTable
)

Sybase是公司而不是数据库。您使用的是哪种Sybase DB产品?另外,请说明您在尝试运行命令时收到的错误消息。错误说明了什么?删除顺序。错误显示“解析器检测到语法错误。在SQL会话窗口的输入编辑器中用鼠标右键单击,或使用“窗口”菜单激活SQL会话,并将光标放置在错误位置。”Sybase是一个公司,而不是数据库。您使用的是哪种Sybase DB产品?另外,请说明您在尝试运行命令时收到的错误消息。错误说明了什么?按删除顺序。错误显示“解析器检测到语法错误。在SQL会话窗口的输入编辑器中用鼠标右键单击,或使用“窗口”菜单激活SQL会话,并将光标放置在错误位置。”即使删除ORDER BY子句,我也会收到相同的错误。即使删除ORDER BY子句,我也会收到相同的错误。您引用的文档不是针对ASE,而是针对Sybase IQ。您引用的文档不是针对ASE,而是针对Sybase IQ。