【问题标题】:How to join two tables on two fields using Exposed?如何使用 Exposed 连接两个字段上的两个表?
【发布时间】:2021-12-26 18:39:23
【问题描述】:

我有以下数据库表:

// CurrenciesTable
object CurrenciesTable : Table("currencies") {
    val symbol = varchar("symbol", 48)
    val name = varchar("name", 48)
    override val primaryKey = PrimaryKey(symbol)
}


// OrdersTable
object OrdersTable : IntIdTable("orders") {
    val baseCurrency = varchar("base_currency", 48)
    val counterCurrency = varchar("counter_currency", 48)
    val price = decimal("price", DECIMAL_PRECISION, DECIMAL_SCALE)
    val createdAtEpochSecond = long("created_at_epoch_second")
}

在 OrdersTable 中,我必须指定引用 CurrenciesTable 的字段:

baseCurrency
counterCurrency

我想从 OrdersTable 中选择记录并将它们与 CurrenciesTable 连接到两个字段中。所以我得到了每种货币的符号和名称。

这是我的 DSL 查询,仅加入 baseCurrency 字段。

// Exposed DSL
OrdersTable.join(CurrenciesTable, JoinType.INNER, OrdersTable.baseCurrency, CurrenciesTable.symbol)
            .selectAll()
            .forEach {
                // Getting OrdersTable record data
                it[OrdersTable.id].value
                it[OrdersTable.price]
                it[OrdersTable.createdAtEpochSecond]

                // Getting CurrenciesTable record data (for baseCurrency only)
                it[CurrenciesTable.symbol]
                it[CurrenciesTable.name]
            }

我尝试按如下方式进行第二次加入:

// Exposed DSL
OrdersTable.join(CurrenciesTable, JoinType.INNER, OrdersTable.baseCurrency, CurrenciesTable.symbol)
           .join(CurrenciesTable, JoinType.INNER, OrdersTable.counterCurrency, CurrenciesTable.symbol)

但是,我得到以下异常。

Caused by: java.sql.SQLSyntaxErrorException: Not unique table/alias: 'currencies'

【问题讨论】:

    标签: kotlin kotlin-exposed


    【解决方案1】:

    尝试为CurrenciesTable添加别名:

    OrdersTable.innerJoin(CurrenciesTable.alias("baseCurrency"), { OrdersTable.baseCurrency }, { CurrenciesTable.symbol })
               .innerJoin(CurrenciesTable, { OrdersTable.counterCurrency }, { CurrenciesTable.symbol })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多