2012-05-04 1 views
1

Я использую UNION ALL, чтобы объединить результаты нескольких SELECT запросов в одном ResultSet. Я использую константные значения полей, чтобы определить, какой оператор произвел каждую строку. Это хорошо работает с MySQL, но Java DB бросает SQLSyntaxErrorException, указывая на запятую после первого значения постоянного поля.Какой синтаксис используется для выбора значения константы из базы данных JavaDB?

Какой синтаксис используется для выбора фиксированных значений полей вSELECTзапросов к базам данных JavaDB?

Первый SELECT имеет ~ 100 столбцов с различными типами данных, а следующие SELECT s дополняются в соответствии с правильным количеством столбцов. У меня это here. Заявления в настоящее время выглядит следующим образом:

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 
+0

http://docs.oracle.com/javadb/10.5.3.0/tuning/ctuntransform14044.html –

ответ

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 
+0

Я использовал эту форму изначально. Он отлично работает с MySQL, но при запуске с Java DB он генерирует 'SQLSyntaxErrorException' для' NULL' после 'COMMTYPE_ID'. В [Mimer SQL validator] (http://developer.mimer.se/validator/parser99/index.tml) предлагалось добавить круглые скобки, которые решили эту проблему. – Keeblebrox

+1

Не слишком знакомы с Java DB, но попробовали ли вы придать NULL правильному типу данных во второй половине вашего объединения? –

+0

@Keeblebrox: должно быть что-то, что вы не используете, потому что синтаксис, безусловно, действителен в Derby (и, следовательно, он должен работать в JavaDB). –

-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 
+3

Цифры должны ** никогда не быть помещены в одинарные кавычки, потому что тогда они больше не являются цифрами –

2

Проблема заключается в том, что Apache Derby не поддерживает

select null from test 

Вместо этого вы должны бросить пустой указатель к правому типу:

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.