【发布时间】:2016-08-12 11:42:58
【问题描述】:
我有两个表:Harvesed_record 和 Harvesed_record_simple_keys 是一一对应的。
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.
我明白这是因为加入后我将有两列“id”。有人可以帮我解决吗?
附: 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();
提前谢谢你。
【问题讨论】:
-
正如错误告诉您的那样,多个列具有相同的名称。您需要为这些列定义别名。 "选择 col AS col1 FROM ..."
-
在表格中我有很多列,我不想为每一列写名字。
-
您在 Stack Overflow 中输入的内容可能比输入列名要多:-)
标签: java postgresql querying