【问题标题】:How to do row insert conditionally, i.e. INSERT INTO with WHERE NOT EXISTS?如何有条件地进行行插入,即 INSERT INTO with WHERE NOT EXISTS?
【发布时间】:2014-05-08 08:51:57
【问题描述】:

让我们考虑一下这张表:

    +----------+----------+
    | user_id  | store_id |
    +----------+----------+
    |    39    |    8     |
    |    8     |    39    |
    |    5     |    11    |
    +----------+----------+

我用 slick 映射它(删除索引和外键以简化它):

case class FavoriteStore(userId: Long, storeId: Long)

class FavoriteStoreTable(tag: Tag) 
     extends Table[FavoriteStore](tag, "FAVORITE_STORE") {
  def userId = column[Long]("USER_ID")
  def storeId = column[Long]("STORE_ID")
  override def * = (userId, storeId) <> 
              (FavoriteStore.tupled, FavoriteStore.unapply)
}

我希望能够使用 Slick 编写以下 SQL 查询:

INSERT INTO favorite_store (user_id, store_id) VALUES (39, 8)
WHERE NOT EXISTS 
    (SELECT * FROM favorite_store WHERE user_id = 39 AND store_id = 8)

有什么想法吗?

【问题讨论】:

标签: scala slick


【解决方案1】:

Slick 目前不支持此功能,我创建了以下问题:https://github.com/slick/slick/issues/800

【讨论】:

    【解决方案2】:

    至少从 Slick 3.0.0 开始,现在可以通过 Slick 中的组合绑定查询实现这一点。

    查看类似问题的答案:https://stackoverflow.com/a/31352126/3305586

    有关编写绑定查询的更多信息(让我更好地理解我刚刚通过一个链接到的答案中所做的事情: Scala slick query where in list

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多