【问题标题】:Querying through java通过java查询
【发布时间】: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


【解决方案1】:

如果您在 select 语句中命名列而不是使用“SELECT *”,则可以省略其中一个表的 ID,因为它始终等于另一个表的 ID。

【讨论】:

  • 是的,我知道,但我不知道如何使用语义进行查询:SELECT *[except some_id] FROM...
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2015-05-21
  • 2019-09-06
  • 2020-10-08
相关资源
最近更新 更多