sql - Sybase DB 中的 Union 子查询出现语法错误

标签 sql union sybase

我们有一个包含以下数据的表 ta_service

Ref_id         seq         desc

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数据库。任何帮助表示赞赏

最佳答案

这里是 sybase 手册的链接,其中说子查询不支持 UNION: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36272.1570/html/commands/X56548.htm

但是我注意到,如果我们在派生表表达式中包含 union 子句,那么它就可以正常工作。以下是 sybase 手册的链接,其中给出了查询的语法: http://infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug418.htm

下面给出了失败和有效查询的示例:

模拟用例:获取来自部门 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
)

关于sql - Sybase DB 中的 Union 子查询出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707594/

相关文章:

mysql - 表成表行

sql - 返回连接在一起的单列值的用户定义函数

mysql - 将多个表合并为一个表

symfony - 与 Doctrine 联合

sql - 启用 sqsh -m bcp 选项获取列名?

mysql - 为什么字符串搜索在 sybase 中区分大小写,而在许多其他数据库中则不区分大小写

sql - 如何强制在 ssrs 报告中显示本周的开始

sql - 获取行中日期值之前的最新日期

SQL Server 如何仅选择表中存在的列

mysql - SQL - 如何选择 "Next Max"记录