Java 如何使用一个SQL查询从一个单独排序的表中组合两个结果集?

Java 如何使用一个SQL查询从一个单独排序的表中组合两个结果集?,java,sql,union,hsqldb,Java,Sql,Union,Hsqldb,这是一个简化的任务,我必须在实际项目中解决。在本项目中,数据存储在HSQLDB中。使用JDBC访问数据 我有一张桌子: name | flag ----------- aa | 1 bb | 0 cc | 1 dd | 0 ee | 1 ff | 0 我需要组合查询以获得下表: name | flag ----------- aa | 1 cc | 1 ee | 1 ff | 0 dd | 0 bb | 0 最后一个表类似于标志=1的行被提取并

这是一个简化的任务,我必须在实际项目中解决。在本项目中,数据存储在HSQLDB中。使用JDBC访问数据

我有一张桌子:

name | flag
-----------
aa   | 1
bb   | 0
cc   | 1
dd   | 0
ee   | 1
ff   | 0
我需要组合查询以获得下表:

name | flag
-----------
aa   | 1
cc   | 1
ee   | 1
ff   | 0
dd   | 0
bb   | 0
最后一个表类似于标志=1的行被提取并按升序排序,标志=0的行被提取并按降序排序,结果被一个接一个地合并

请注意,标志为1的行和标志为0的行的排序顺序相反

在SQL中可以这样做吗?我不想手动在Java代码中进行两次查询和合并结果集。

试试以下方法:

SELECT name, flag
FROM 'table'
ORDER BY flag desc, name
只要有可能,就让数据库来做这项工作。不要在Java中做这样的事情。首先考虑SQL。

尝试以下方法:

SELECT name, flag
FROM 'table'
ORDER BY flag desc, name
只要有可能,就让数据库来做这项工作。不要在Java中做这样的事情。首先考虑SQL。

order by可以包含多个列:

select *
from table
order by flag desc, name asc
order by可以包含多个列:

select *
from table
order by flag desc, name asc

在任何SQL中,只有最外层的ORDERBY应用,因此必须在那里执行

我不知道这是否适用于您的SQL方言,也无法检查抱歉,但您可以这样做

SELECT name, flag
FROM  'table'
ORDER BY
    flag desc,
    CASE WHEN flag = 1 THEN name ELSE '' END,
    CASE WHEN flag = 0 THEN name ELSE '' END DESC

在任何SQL中,只有最外层的ORDERBY应用,因此必须在那里执行

我不知道这是否适用于您的SQL方言,也无法检查抱歉,但您可以这样做

SELECT name, flag
FROM  'table'
ORDER BY
    flag desc,
    CASE WHEN flag = 1 THEN name ELSE '' END,
    CASE WHEN flag = 0 THEN name ELSE '' END DESC

请注意,flag=0行中的列名排序顺序相反。请写一个连贯的问题,不要再粗鲁了。我现在投票反对你的问题。@Ilya:你在这之后加上了这个要求answer@gbn-不完全是,要求之前就存在,他只是编辑了它,以便在看到人们误解情况是从一开始就存在时更清楚。当我看到人们的误解后,我把关键词加粗并添加了“请注意”这句话。。。让问题更清楚@弗罗迪:谢谢。一切都和你描述的一模一样。请注意,flag=0行中的列名排序顺序相反。请写一个连贯的问题,不要再粗鲁了。我现在投票反对你的问题。@Ilya:你在这之后加上了这个要求answer@gbn-不完全是,要求之前就存在,他只是编辑了它,以便在看到人们误解情况是从一开始就存在时更清楚。当我看到人们的误解后,我把关键词加粗并添加了“请注意”这句话。。。让问题更清楚@弗罗迪:谢谢。一切都和您描述的一样。谢谢,您的解决方案在HSQLDB中工作。但你们能解释一下在数据库中排序是如何工作的吗?引擎选择行,然后应用两种顺序表达式,一种是:如果flag=1,则应用flag desc、name、desc;另一种是:如果flag=0,则应用flag desc、name desc?我以前从未见过动态order by表达式。它在3列上排序,但第2列或第3列都是常量,因此实际上忽略了Dhanks,您的解决方案在HSQLDB中工作。但你们能解释一下在数据库中排序是如何工作的吗?引擎选择行,然后应用两种顺序表达式,一种是:如果flag=1,则应用flag desc、name、desc;另一种是:如果flag=0,则应用flag desc、name desc?我以前从未遇到过动态order by表达式。它在3列上排序,但第2列或第3列都是常量,因此实际上被忽略