有没有办法将这两个语句合并为一个而没有重复的条目?
SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP)
order by TimeP limit 50
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud)
我的第一个显而易见的尝试不受支持SQLITE(语法错误:限制子句应该在UNION之后而不是之前):
SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP)
order by TimeP limit 50
UNION
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud)
Gar*_*thD 27
使用子查询并在其中执行限制.
SELECT *
FROM ( SELECT *
FROM Seq
WHERE JULIANDAY('2012-05-25 19:02:00') <= JULIANDAY(TimeP)
ORDER BY TimeP
LIMIT 50
)
UNION
SELECT *
FROM ( SELECT *
FROM Seq
WHERE JULIANDAY('2012-05-29 06:20:50') <= JULIANDAY(TimeI)
ORDER BY TimeI
LIMIT 50
)
Run Code Online (Sandbox Code Playgroud)
查询分阶段处理:
FROM 条款和所有连接;WHERE子句和所有谓词.因此,如果您想NULL在结果集中查看值,则不应OUTER在该WHERE部分中过滤-joined表列,因为这会将您的查询转换为INNER连接;GROUP BY和HAVING条款;UNION,INTERSECT,EXCEPT或MINUSORDER BYLIMIT因此,正如其他人所指出的那样,使用ORDER BY和LIMIT before UNION子句在语法上是错误的.您应该使用子查询:
SELECT *
FROM (SELECT * FROM Seq
WHERE JULIANDAY('2012-05-25 19:02:00') <= JULIANDAY(TimeP)
ORDER BY TimeP LIMIT 50) AS tab1
UNION
SELECT *
FROM (SELECT * FROM Seq
WHERE JULIANDAY('2012-05-29 06:20:50') <= JULIANDAY(TimeI)
ORDER BY TimeI LIMIT 50) AS tab2;
Run Code Online (Sandbox Code Playgroud)