让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)

参考技术A 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语句的顺序返回结果的主要内容,如果未能解决你的问题,请参考以下文章

sql语句 不让结果排序,按照in语句的顺序返回结果

NSFetchRequest 使用 IN 语句忽略我的订单

如何按照IN语句里的顺序进行排序

SQL,“WHERE IN”返回自动排序的结果[重复]

SQL语句中:UNION与UNION ALL的区别

sqlserver排序