所以我从我的第一个选择中得到10个结果,在联合后从另一个中得到1个结果,如下所示:
(SELECT a.*,
b.*
FROM all a,
names b
WHERE b.name_id = a.name_id
ORDER BY name_id DESC
LIMIT 10)
UNION
(SELECT a.*,
b.*
FROM all a,
names b
WHERE b.name_id = a.name_id
ORDER BY request_id ASC
LIMIT 1)
我想把第二次选择的结果作为第二次选择的最后一个结果
********
name_id 100
name_id 99
name_id 98
name_id 97
name_id 96
name_id 95
name_id 94
name_id 93
name_id 92
name_id 1 <- second select result as second last result
name_id 91
********
有人能帮忙吗?
3条答案
按热度按时间8gsdolmq1#
合成查询的行号列,并根据需要调整位置。
(注意,为了避免语法错误/支持demo:table,对查询进行了细微的修改
all
已命名allx
,联合子查询的显式投影)。这会很快变得复杂,因此在临时报告之后,最好在联合的子查询中合成一个反映全局顺序的属性。
此处演示(sql fiddle)
信用
行数取自此so答案
g6baxovj2#
提出了一个有趣的问题
在第一个子查询中使用一个变量来计算行号的情况下,由于该变量在第二个子查询中没有重置,因此一个简单的算法可以计算出第二个子查询结果的位置。注意,第二个子查询使用左连接来检查结果是否尚未出现在第一个子查询中,
lf3rwulv3#
我建议
union all
有三种选择: