我们有一个包含以下数据的表 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/