在DB2中维护秩序;在;查询
这个问题的基础是。我正在寻找一种在DB2中有效的解决方案。原来的问题是: 我有下表在DB2中维护秩序;在;查询,db2,Db2,这个问题的基础是。我正在寻找一种在DB2中有效的解决方案。原来的问题是: 我有下表 DROP TABLE IF EXISTS `test`.`foo`; CREATE TABLE `test`.`foo` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 然
DROP TABLE IF EXISTS `test`.`foo`;
CREATE TABLE `test`.`foo` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后我尝试根据主键获取记录
SELECT * FROM foo f where f.id IN (2, 3, 1);
然后我得到以下结果
+----+--------+
| id | name |
+----+--------+
| 1 | first |
| 2 | second |
| 3 | third |
+----+--------+
3 rows in set (0.00 sec)
可以看到,结果是按id排序的。我试图实现的是按照我在查询中提供的顺序对结果进行排序。给出这个例子,它应该返回
+----+--------+
| id | name |
+----+--------+
| 2 | second |
| 3 | third |
| 1 | first |
+----+--------+
3 rows in set (0.00 sec)
您可以使用派生列进行自定义排序
选择
案例
当serv.serv_deliver_ID='9486154876'时,则为1个ELSE
当serv.serv_deliver_ID='9403149581'时,其他2个3
以自定义订单结束,
...
...
按客户订单订购
您可以使用派生列进行自定义排序
选择
案例
当serv.serv_deliver_ID='9486154876'时,则为1个ELSE
当serv.serv_deliver_ID='9403149581'时,其他2个3
以自定义订单结束,
...
...
按客户订单订购
您可以使用具有所需ID和顺序的派生表,然后将该表加入,例如
SELECT ...
FROM mcscb.mcs_premise prem
JOIN mcscb.mcs_serv_deliv_id serv
ON prem.prem_nb = serv.prem_nb
AND prem.tech_col_user_id = serv.tech_col_user_id
AND prem.tech_col_version = serv.tech_col_version
JOIN (
SELECT 1, '9486154876' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 2, '9403149581' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 3, '9465828230' FROM SYSIBM.SYSDUMMY1
) B (ORD, ID)
ON serv.serv_deliv_id = B.ID
WHERE serv.tech_col_user_id = 'CRSSJEFF'
AND serv.tech_col_version = '00'
ORDER BY B.ORD
您可以使用具有所需ID和所需顺序的派生表,然后将该表加入,例如
SELECT ...
FROM mcscb.mcs_premise prem
JOIN mcscb.mcs_serv_deliv_id serv
ON prem.prem_nb = serv.prem_nb
AND prem.tech_col_user_id = serv.tech_col_user_id
AND prem.tech_col_version = serv.tech_col_version
JOIN (
SELECT 1, '9486154876' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 2, '9403149581' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 3, '9465828230' FROM SYSIBM.SYSDUMMY1
) B (ORD, ID)
ON serv.serv_deliv_id = B.ID
WHERE serv.tech_col_user_id = 'CRSSJEFF'
AND serv.tech_col_version = '00'
ORDER BY B.ORD
为了使逻辑更加清晰,您可以修改如下:
为了使逻辑更加清晰,您可以修改如下:
列表中的
没有顺序(在正确的SQL数据库中)。然而,你想要什么样的顺序,为什么,现在还不清楚。我把我的问题改成和我提到的问题一样。对于这个问题,我真的只是在寻找相同的答案,但对于db2来说,
列表中的没有顺序(无论如何,在一个合适的SQL数据库中)。然而,你想要什么样的顺序,为什么,现在还不清楚。我把我的问题改成和我提到的问题一样。我真的只是在寻找与db2相同的答案。我将我的问题更改为与我引用的问题相同。@AlexM您更改了措辞,但答案仍然相同。SQL没有明确的顺序。如果你想要一个订单,你必须使用orderby
,要使用它,你必须在……上下订单。。。在本例中,要做到这一点,您必须将所需的顺序与ID关联起来(您不能只是传入一个列表,并期望SQL保持相同的顺序,数据库可以以对其最有意义的方式自由地对列表重新排序)。这就是我的答案。感谢你们不仅回答了我的问题,而且重构了我的查询!我已将我的问题更改为与我引用的问题相同。@AlexM您更改了措辞,但答案仍然相同。SQL没有明确的顺序。如果你想要一个订单,你必须使用orderby
,要使用它,你必须在……上下订单。。。在本例中,要做到这一点,您必须将所需的顺序与ID关联起来(您不能只是传入一个列表,并期望SQL保持相同的顺序,数据库可以以对其最有意义的方式自由地对列表重新排序)。这就是我的答案。感谢你们不仅回答了我的问题,而且重构了我的查询!我已将我的问题更改为与我正在引用的问题相同。我已将我的问题更改为与我正在引用的问题相同。尝试此操作时,我收到错误非法符号“ORDERED_IN_LIST”。一些可能合法的符号是:DSN_INLINE_OPT_HINT。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.15.100 SQL Code:-104,SQL State:42601
您的Db2版本/平台是什么?您应该在问题中说明这一点。@AlexM db2 for z/os不允许这样使用值。必须是:将有序的\u in_列表(ord,id)设置为(从sysibm.sysdummy1 union all选择1,'9486154876',从sysibm.sysdummy1 union all选择2,'9403149581',从sysibm.sysdummy1 union all选择3,'94658230',从sysibm.sysdummy1选择…
尝试此操作时,我收到错误非法符号“有序的\u in_list”。一些可能合法的符号是:DSN_INLINE_OPT_HINT。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.15.100 SQL Code:-104,SQL State:42601
您的Db2版本/平台是什么?您应该在问题中说明这一点。@AlexM db2 for z/os不允许这样使用值。必须是:,有序列表(ord,id)为(从sysibm.sysdummy1 union all选择1,'9486154876',从sysibm.sysdummy1 union all选择2,'9403149581',从sysibm.sysdummy1 union all选择3,'94658230',从sysibm.sysdummy1选择…