让sql语句不排序,按照in语句的顺序返回结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让sql语句不排序,按照in语句的顺序返回结果相关的知识,希望对你有一定的参考价值。
比如 sql语句为
select * from order where oderid in(111,222,333,444,555,666)
数据为
id name
111 C
222 D
333 R
444 F
555 W
666 K
要求输出的结果集为 C D R F W K
不是C D F K R W
就是把结果的自动排序去掉 要求按in里面的内容排序 ,怎么写 数据库限定为DB2,知道的情赐教,万分感激
sql语句为
select name from order where oderid in(111,222,333,444,555,666)
order by instr('111,222,333,444,555,666',orderid)
instr是orale里面表示字串出现位置的一个函数.DB2应该也有这样的函数 参考技术B 如你界面所示数据:你按ID排序就可以了追问
如果ID顺序打乱的怎么办 上面举例的时候没有注意
参考技术C select name from order where oderid in(select id from ID表 order by asc) 参考技术D 多简单啊追问请赐教啊
追答select name from order where oderid in(111,222,333,444,555,666)
order by instr('111,222,333,444,555,666',orderid)
instr是orale里面表示字串出现位置的一个函数.DB2应该也有这样的函数
NSFetchRequest 使用 IN 语句忽略我的订单
【中文标题】NSFetchRequest 使用 IN 语句忽略我的订单【英文标题】:NSFetchRequest using IN statement ignores my order 【发布时间】:2014-12-17 16:57:04 【问题描述】:我们有一个网络资源,我想在其中进行搜索,我希望首先返回最低价格的结果。
网络响应正在正确返回内容;并且按照我想要的顺序 - 但是当我使用 IN 语句(我使用 NSSet)执行 NSFetchRequest 时,返回的顺序与我提供的顺序不同,我不确定如何解决它。
为简单起见,我将使用 ID;
以下是来自服务器使用 ID 的响应
(
54916a82e677b8234499df30,
54916a23e677b8234499df2f,
54916938e677b8234499df2d,
5491696ae677b8234499df2e
)
上述集合中的顺序是正确的。
现在当我们这样做时:
NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:[self entityName]];
fr.predicate = [NSPredicate predicateWithFormat:@"remoteID IN %@", orderedSet];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:fr error:&error];
我做了一个断点——结果数组不再是我输入的顺序。
po results
<_PFArray 0x7fd082a3f960>(
<EmptyLeg: 0x7fd080487af0> (entity: EmptyLeg; id: 0xd000000000800004 <x-coredata://953BCD04-9E4E-497C-8B31-32A58CCB0305/EmptyLeg/p32> ; data:
remoteID = 54916938e677b8234499df2d;
),
<EmptyLeg: 0x7fd0804db7f0> (entity: EmptyLeg; id: 0xd0000000007c0004 <x-coredata://953BCD04-9E4E-497C-8B31-32A58CCB0305/EmptyLeg/p31> ; data:
remoteID = 5491696ae677b8234499df2e;
),
<EmptyLeg: 0x7fd0829937b0> (entity: EmptyLeg; id: 0xd000000000880004 <x-coredata://953BCD04-9E4E-497C-8B31-32A58CCB0305/EmptyLeg/p34> ; data:
remoteID = 54916a23e677b8234499df2f;
),
<EmptyLeg: 0x7fd08291daa0> (entity: EmptyLeg; id: 0xd000000000840004 <x-coredata://953BCD04-9E4E-497C-8B31-32A58CCB0305/EmptyLeg/p33> ; data:
remoteID = 54916a82e677b8234499df30;
)
)
我们可以看到,54916a82e677b8234499df30
应该在列表的顶部,而它却在列表的底部
我希望 NSFetchRequest 尊重输入的顺序,从而以相同的顺序响应输出。
我不需要做进一步的排序,因为服务器已经按照上面的指示返回了订单。
我相信这与此有关:
fr.predicate = [NSPredicate predicateWithFormat:@"remoteID IN %@", orderedSet];
orderedSet
是上面列出的项目的 NSSet。
我如何确保使用 IN 语句的 NSFetchRequest 尊重我的排序而不进一步排序。
我不想依赖通过 remoteID 排序,因为它们不是严格的数字,将来可能无法与字符串进行比较。
非常感谢
获取请求如下;
<NSFetchRequest: 0x7f9f2857dbb0> (entity: EmptyLeg; predicate: (remoteID IN "54916a82e677b8234499df30", "54916a23e677b8234499df2f", "54916938e677b8234499df2d", "5491696ae677b8234499df2e"); sortDescriptors: ((null)); type: NSManagedObjectResultType; )
【问题讨论】:
【参考方案1】:对于 SQL 数据库,除非您使用 ORDER BY 子句,否则不保证返回行的顺序是非常标准的。核心数据类似。如果您想保证顺序,您需要在获取请求上使用排序描述符。或者,可能只是事后对它们进行排序。
【讨论】:
真可惜。我得试试这个。 我刚刚意识到搜索实际上并没有插入数据;所以这可以解释为什么我期望它在无法保证的情况下会保持相同的顺序。所以我会尝试排序。以上是关于让sql语句不排序,按照in语句的顺序返回结果的主要内容,如果未能解决你的问题,请参考以下文章