使用什么语法从JavaDB数据库中选择常量字段值?

使用什么语法从JavaDB数据库中选择常量字段值?,java,mysql,sql,derby,Java,Mysql,Sql,Derby,我正在使用UNION ALL将多个SELECT查询的结果组合成一个ResultSet。我使用常量字段值来标识生成每行的语句。这在MySQL中运行良好,但Java DB抛出了SQLSyntaxErrorException,指向第一个常量字段值后的逗号 在针对JavaDB数据库的选择查询中,使用什么语法来选择常量字段值? 第一个SELECT有约100列,数据类型各不相同,下面的SELECTs被填充以匹配正确的列数。我知道了。当前的语句如下所示: select (0, ID, NAME_FIR

我正在使用
UNION ALL
将多个
SELECT
查询的结果组合成一个
ResultSet
。我使用常量字段值来标识生成每行的语句。这在MySQL中运行良好,但Java DB抛出了
SQLSyntaxErrorException
,指向第一个常量字段值后的逗号

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

第一个
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

删除
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

删除
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

试着把你的数字用单引号引起来

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

试着把你的数字用单引号引起来

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

问题是ApacheDerby不支持

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语法

问题是ApacheDerby不支持

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语法

数字永远不应该用单引号引起来,因为这样它们就不是任何长的数字。数字永远不应该用单引号引起来,因为这样它们就不是我最初使用的那种形式的任何长的数字。它在MySQL上运行得很好,但在Java DB上运行时,它在
COMMTYPE_ID
之后为
NULL
抛出
SQLSyntaxErrorException
。作者建议添加括号,这就解决了这个问题。虽然对Java DB不太熟悉,但您是否尝试过在联合体的后半部分将NULL强制转换为正确的数据类型?@Keeblebrox:一定有什么您没有告诉我们的用法,因为语法在Derby中确实有效(因此在Java DB中应该可以工作)@DavidM:我还没有尝试将
NULL
值转换为合适的类型。这将需要一些相当重要的修改,但我会尝试一下。@a_horse_with_no_name:查询中选择的列要多得多,因此为了简洁起见,我截断了大部分列。到目前为止,他们似乎还没有影响到这个问题,但如果相关的话,我会更新这个问题。我最初使用的是这个表单。它在MySQL上运行得很好,但在Java DB上运行时,它在
COMMTYPE_ID
之后为
NULL
抛出
SQLSyntaxErrorException
。作者建议添加括号,这就解决了这个问题。虽然对Java DB不太熟悉,但您是否尝试过在联合体的后半部分将NULL强制转换为正确的数据类型?@Keeblebrox:一定有什么您没有告诉我们的用法,因为语法在Derby中确实有效(因此在Java DB中应该可以工作)@DavidM:我还没有尝试将
NULL
值转换为合适的类型。这将需要一些相当重要的修改,但我会尝试一下。@a_horse_with_no_name:查询中选择的列要多得多,因此为了简洁起见,我截断了大部分列。到目前为止,他们似乎还没有影响到这个问题,但我会更新这个问题,以防相关。