2016-08-12 1 views
0

У меня есть две таблицы: harvested_record и harvested_record_simple_keys, которые связаны друг с другом.Querying через java

harvested_record 

id|harvested_record_simple_keys_id|a lot of columns 



harvested_record_simple_keys 

id| a lot of columns 

и я хочу сделать запрос, в котором мне нужно объединить две таблицы. В результате у меня будет таблица:

joined_table 
id(harvested_record)| (harvested_record_simple_keys)|a lot of columns. 

К сожалению, я получаю исключение: nested exception is java.sql.SQLSyntaxErrorException: Column name 'ID' matches more than one result column.

Я понял это потому, что после того, как присоединиться к я два столбца «идентификатор». Кто-нибудь может помочь мне с решением?

P.S. SQL заявление (работает в консоли IDEA):

SELECT * FROM (SELECT TMP_ORDERED.*, ROW_NUMBER() OVER() AS ROW_NUMBER FROM (SELECT * FROM harvested_record hr JOIN harvested_record_simple_keys hrsk ON hrsk.id = hr.harvested_record_simple_keys_id WHERE import_conf_id = ?) AS TMP_ORDERED) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER <= 2 ORDER BY import_conf_id ASC, record_id ASC; 

Java-код (предположим, что ошибка здесь):

JdbcPagingItemReader<HarvestedRecord> reader = new JdbcPagingItemReader<HarvestedRecord>(); 
SqlPagingQueryProviderFactoryBean pqpf = new SqlPagingQueryProviderFactoryBean(); 
pqpf.setDataSource(dataSource); 
pqpf.setSelectClause("SELECT *"); 
pqpf.setFromClause("FROM harvested_record hr JOIN harvested_record_simple_keys hrsk ON hrsk.id = hr.harvested_record_simple_keys_id"); 

String whereClause = "WHERE import_conf_id = :configId"; 
if (from!=null) { 
    fromStamp = new Timestamp(from.getTime()); 
    whereClause += " AND updated >= :from"; 
} 
if (to!=null) { 
    toStamp = new Timestamp(to.getTime()); 
    whereClause += " AND updated <= :to"; 
} 

if (configId != null) { 
    pqpf.setWhereClause(whereClause); 
} 

pqpf.setSortKeys(ImmutableMap.of("import_conf_id", 
     Order.ASCENDING, "record_id", Order.ASCENDING)); 
reader.setRowMapper(harvestedRecordRowMapper); 
reader.setPageSize(PAGE_SIZE); 
reader.setQueryProvider(pqpf.getObject()); 
reader.setDataSource(dataSource); 
if (configId != null) { 
    Map<String, Object> parameterValues = new HashMap<String, Object>(); 
    parameterValues.put("configId", configId); 
    parameterValues.put("from", fromStamp); 
    parameterValues.put("to", toStamp); 
    reader.setParameterValues(parameterValues); 
} 
reader.afterPropertiesSet(); 

Спасибо заранее.

+0

Так же, как указывают ошибки, несколько столбцов имеют одинаковое имя. Вам нужно определить псевдонимы для этих столбцов. «Выберите col AS col1 FROM ...» –

+0

В таблицах у меня много столбцов, и я бы не хотел писать имена для каждого столбца. –

+0

, вы, возможно, сделали больше ввода в Stack Overflow, чем это потребовалось бы, чтобы набрать имена столбцов :-) – jalynn2

ответ

0

Если вы укажете свои столбцы в инструкции select вместо «SELECT *», вы можете опустить идентификатор из одной из таблиц, так как он всегда равен id из другой таблицы.

+0

Да, я знаю, но я понятия не имею, как сделать запрос с семантикой: SELECT * [except some_id] FROM ... –

+0

Вам нужно указать столбцы: Выберите hr.id, Col2, col3, ... – jalynn2