order by 和union all 如何共存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了order by 和union all 如何共存相关的知识,希望对你有一定的参考价值。
类似如下的sql:
Select id,cc,dd from A
union all
select id ,cc,dd from B
order by id,
如果我只想按照 表A 中的id 来排列,并且要把把表B 的记录放在最后,该如何做?谢谢
SELECT [Id],[Name],[Comment] FROM [Product1]
UNION
SELECT [Id],[Name],[Comment] FROM [Product2]
上面的代码可以实现将从Product1和Product2两张表合并成一个表。 参考技术A 这个如果是sqlserver2005以上版本的话,可以在A表处使用row_number()函数创建排序行号
然后union all b表的数据,可以用一个较大值充当行号如100000
最后以行号进行排序即可来自:求助得到的回答本回答被提问者采纳 参考技术A 需要排序的再嵌套一下:
select id,cc,dd from (Select id,cc,dd from A order by id)
union all
select id ,cc,dd from B 参考技术B select id,cc,dd
from (
Select id,cc,dd from A
union all
select id ,cc,dd from B
)
order by id追问
sorry,这样的结果貌似不能保证表B 的记录放在结果集的最后,我试过了,谢谢
追答select id,cc,dd
from (
select id,cc,dd ,tt
from
(Select id,cc,dd,1 tt from A
union all
select id ,cc,dd,2 tt from B
)
order by tt , id
)
那就加个排序字段啊
如何使用 SQLite 使用 UNION ALL 和 ORDER BY 进行排序
【中文标题】如何使用 SQLite 使用 UNION ALL 和 ORDER BY 进行排序【英文标题】:How to sort using UNION ALL and ORDER BY using SQLite 【发布时间】:2013-06-04 06:23:21 【问题描述】:我在 android 的 SQLite 数据库中有一些数据。我想使用 WHERE 子句使用 LIKE 和 NOT LIKE 条件从数据库中检索数据。我正在使用 UNION ALL 命令组合两个语句。为此,查询是
SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING.
这将返回一些行。然后我正在写查询
SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING.
这将返回剩余的行。
我想先返回第一个查询项,然后再返回第二个查询项。这可以通过使用 UNION ALL 命令来实现。所以查询就像
db.rawQuery("SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING UNION ALL SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING")
但我希望在第一个查询项目/项目之后和之后按排序顺序排列第二个查询项目。所以我写了这样的查询
db.rawQuery("(SELECT * FROM TABLENAME WHERE column_name LIKE SOMTHING) UNION ALL (SELECT * FROM TABLENAME WHERE column_name NOT LIKE SOMTHING ORDER BY column_name)")
我需要该表中的所有数据,但首先我希望不需要排序的第一个查询返回的行,但在这些行之后,我希望所有行(不喜欢)按排序顺序, 我以排序形式获取所有数据,在第一个位置它没有返回第一个查询的行(在联合所有之前)
任何人都可以帮助我解决这个问题。提前致谢。
【问题讨论】:
什么实际上不起作用?在您的最后一个代码中,您只在联合之后对查询进行排序,而不是在联合之前对查询进行排序,这是问题所在吗? 我需要该表中的所有数据,但首先我希望不需要排序的第一个查询返回的行,但在这些行之后,我希望所有行(不喜欢的)按排序顺序,我是以排序形式获取所有数据,在第一个位置它不返回第一个查询的行(在联合所有之前) 首先你可能需要理解这样的封顶句子看起来很粗鲁。然后,如果您正在复制您在应用程序中编码的内容,那么您在查询末尾缺少 1 个右括号,请检查添加它是否可以解决您的问题。 我很抱歉我的错误。我不是从我的代码中复制这个。现在我编辑了我的帖子。 该代码应该可以工作,至少它可以在我的应用程序中工作。所谓的“column_name”是文本中的主键吗?因为如果是这样,数据库本身可能会将其用作索引机制之类的东西,因此它将自动按字母顺序排序。不太确定很难,如果这符合您的情况,请尝试使用一些自动增量 ID 作为主键。 【参考方案1】:您只能订购整个结果。
这意味着您必须引入一个虚拟列才能将记录与子查询区分开来:
SELECT *, 0 AS SubQueryNr FROM TableName WHERE column_name LIKE ?
UNION ALL
SELECT *, 1 FROM TableName WHERE column_name NOT LIKE ?
ORDER BY SubQueryNr, column_name
或者,只需使用LIKE
条件进行排序:
SELECT * FROM TableName
ORDER BY column_name LIKE ? DESC
【讨论】:
感谢您的建议。我们将服务器中的数据从我们获取数据的位置排序到数据库。所以不需要对查询进行排序。再次感谢您的帮助以上是关于order by 和union all 如何共存的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQLite 使用 UNION ALL 和 ORDER BY 进行排序
在android中使用UNION ALL时如何对特定语句使用order by
Rails - “union all”之后的“order by”