1

我正在使用UNION ALL将多个SELECT查询的结果合并为一个ResultSet. 我使用常量字段值来识别生成每一行的语句。这适用于 MySQL,但 Java DB 会抛出SQLSyntaxErrorException,指向第一个常量字段值之后的逗号。

在针对 JavaDB 数据库的查询中使用什么语法来选择常量字段值?SELECT

第一个SELECT有大约 100 列具有不同的数据类型,下面SELECT的 s 被填充以匹配正确的列数。我这里有。当前的语句如下所示:

select
    (0, ID, NAME_FIRST, NAME_LAST)
from person 
where ID=500
union all
select 
    (1, COMMTYPE_ID, NULL, NULL)
from person_commtype 
where PERSON_ID=500

这会引发以下异常:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "," at line 2, column 7.

我也尝试过强制转换值,并删除括号,如下所示:

select
    (cast(0 as integer), ID, NAME_FIRST, NAME_LAST)
from person 
where ID=500

select
    0, ID, NAME_FIRST, NAME_LAST
from person
where ID=500
4

3 回答 3

4

SELECT从子句中的字段列表中删除括号。

select
    0, ID, NAME_FIRST, NAME_LAST
from person 
where ID=500
union all
select 
    1, COMMTYPE_ID, NULL, NULL
from person_commtype 
where PERSON_ID=500
于 2012-05-04T18:43:47.050 回答
2

问题是 Apache Derby 不支持

select null from test

相反,您必须将 null 转换为正确的类型:

select cast(null as varchar(255)) from test

所以查询看起来像:

select
    0, ID, NAME_FIRST, NAME_LAST
from person where ID=500
union all
select 
    1, COMMTYPE_ID, 
    cast(NULL as varchar(255)), 
    cast(NULL as varchar(255))
from person_commtype where PERSON_ID=500

您还必须删除列列表周围的括号,因为这不是标准的 SQL 语法。

于 2012-05-10T11:53:26.843 回答
-1

尝试将您的数字放在单引号中。

select
    ('0', ID, NAME_FIRST, NAME_LAST)
from person 
where ID=500
union all
select 
    ('1', COMMTYPE_ID, NULL, NULL)
from person_commtype 
where PERSON_ID=500
于 2012-05-04T18:44:39.850 回答