使用什么语法从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:查询中选择的列要多得多,因此为了简洁起见,我截断了大部分列。到目前为止,他们似乎还没有影响到这个问题,但我会更新这个问题,以防相关。