【发布时间】:2021-09-07 15:07:54
【问题描述】:
我有两张表,分别是 FUTURE_DATED_TRANSACTION 和 TRANSACTION_JOURNAL 。我想我有点知道如何过滤记录是否只存在于一个表上,但是我不能与左连接(第二个表)一起完成。
我的 TRANSACTION_JOURNAL 表有一个 FUTURE_DATED_TRANSACTION_ID 字段,其中包含重复值,我希望它从输出中消失,因为它只是从父表中输出重复项,如下面的示例所示。
我现在的输出是这样的
FUTURE_DATED_TRANSACTION_1
- TRANSACTION_JOURNAL_1
- TRANSACTION_JOURNAL_1
- TRANSACTION_JOURNAL_1
我的预期输出是
FUTURE_DATED_TRANSACTION_1
- TRANSACTION_JOURNAL_1
我怎样才能让它以这种方式输出?
我的代码sn-p是
private final DSLContext dsl;
........
return this.dsl
.select(
FUTURE_DATED_TRANSACTION.FUTURE_DATED_TRANSACTION_ID,
FUTURE_DATED_TRANSACTION.REFERENCE_NUMBER,
FUTURE_DATED_TRANSACTION.RECURRING_FREQUENCY,
FUTURE_DATED_TRANSACTION.RECURRING_DAY_OF_THE_MONTH,
FUTURE_DATED_TRANSACTION.RECURRING_DAY_OF_THE_WEEK,
FUTURE_DATED_TRANSACTION.TRANSFER_SCHEDULE_DATE,
FUTURE_DATED_TRANSACTION.RECURRING_START_DATE,
FUTURE_DATED_TRANSACTION.RECURRING_END_DATE,
FUTURE_DATED_TRANSACTION.AMOUNT,
FUTURE_DATED_TRANSACTION.STATUS,
FUTURE_DATED_TRANSACTION.STATUS_REMARKS,
FUTURE_DATED_TRANSACTION.CURRENCY_ID,
TRANSACTION_JOURNAL.ID.as("transactions_id"),
TRANSACTION_JOURNAL.REFERENCE_NUMBER.as("transactions_childReferenceNumber"),
TRANSACTION_JOURNAL.SOURCE_ACCOUNT_NUMBER.as("transactions_debtorAccountId"),
TRANSACTION_JOURNAL.SOURCE_ACCOUNT_TYPE.as("transactions_debtorAccountType"),
TRANSACTION_JOURNAL.DESTINATION_ACCOUNT_NUMBER.as("transactions_creditorAccountId"),
TRANSACTION_JOURNAL.DESTINATION_ACCOUNT_TYPE.as("transactions_creditorAccountType"),
TRANSACTION_JOURNAL.CURRENCY_ID.as("transactions_debtorAccountCurrencyId"),
TRANSACTION_JOURNAL.CURRENCY_ID_DESTINATION.as("transactions_creditorAccountCurrencyId"),
TRANSACTION_JOURNAL.AMOUNT.as("transactions_amount"),
TRANSACTION_JOURNAL.SERVICE_FEE.as("transactions_serviceFee"),
TRANSACTION_JOURNAL.TRANSACTION_DATE.as("transactions_transferScheduledDate"),
TRANSACTION_JOURNAL.ESB_POSTED_DATE.as("transactions_postedDate"),
TRANSACTION_JOURNAL.STATUS.as("transactions_transferStatus"),
TRANSACTION_JOURNAL.STATUS_REMARKS.as("transactions_statusRemarks"),
TRANSACTION_JOURNAL.TRANSFER_SCHEDULE_TYPE.as("transactions_transactionType"),
TRANSACTION_JOURNAL.REMARKS.as("transactions_remarks"),
TRANSACTION_JOURNAL.POSTING_DATE.as("transactions_completionDate"),
TRANSACTION_JOURNAL.CREDITOR_DETAILS.as("transactions_creditorDetails"),
SEND_MONEY_TYPE.CODE.as("transactions_sendMoneyCode"),
SEND_MONEY_TYPE.SEND_MONEY_TYPE_NAME.as("transactions_sendMoneyType")
)
.from(
this.dsl
.select(FUTURE_DATED_TRANSACTION.fields())
.from(FUTURE_DATED_TRANSACTION)
.leftJoin(TRANSACTION_JOURNAL)
.on(FUTURE_DATED_TRANSACTION.FUTURE_DATED_TRANSACTION_ID
.eq(TRANSACTION_JOURNAL.FUTURE_DATED_TRANSACTION_ID))
.where(this.getQueryConditions(sendMoneyScheduledFilter))
.and(this.addWildCardQueryParent(query))
.and((TRANSACTION_JOURNAL.DESTINATION_ACCOUNT_NUMBER.in(accountList)
.and(TRANSACTION_JOURNAL.STATUS.eq(TransactionStatus.POSTED.toLabel())))
.or(TRANSACTION_JOURNAL.CUSTOMER_NUMBER.eq(userId)))
.groupBy(FUTURE_DATED_TRANSACTION.fields())
.orderBy(FUTURE_DATED_TRANSACTION.FUTURE_DATED_TRANSACTION_ID.desc())
.limit(limit)
.offset(offset - 1)
.asTable("future_dated_transaction")
)
.leftJoin(TRANSACTION_JOURNAL)
.on(FUTURE_DATED_TRANSACTION.FUTURE_DATED_TRANSACTION_ID
.eq(TRANSACTION_JOURNAL.FUTURE_DATED_TRANSACTION_ID))
.leftJoin(SEND_MONEY_TYPE)
.on(TRANSACTION_JOURNAL.SEND_MONEY_TYPE_ID.eq(SEND_MONEY_TYPE.ID))
.where(this.getQueryConditions(sendMoneyScheduledFilter));
我已经尝试过 Select Distinct 的不同迭代,如下所示,
但我一直收到错误
.....嵌套异常是 java.sql.SQLSyntaxErrorException: You have an SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'on 附近使用正确的语法 (
transaction_journal.future_dated_transaction_id) `future_dated_transacti' 在第 1 行"
这与我在使用 Select Distinct 的不同代码迭代中得到的几乎相同。我当前的设置真的不支持这种排序,还是只是我的代码有误? TIA。
【问题讨论】:
标签: mysql sql spring select distinct