Как сделать строку insert условно, т. е. вставить в С где не существует?


Рассмотрим следующую таблицу:

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

Я сопоставил его с slick with (dropping indexes & foreign keys for simplifying it):

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)
}

Я хотел бы иметь возможность написать следующий SQL-запрос с помощью Slick:

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)

Есть идеи?

2 2

2 ответа:

Это в настоящее время не поддерживается Slick, и я создал следующую проблему: https://github.com/slick/slick/issues/800

Так как по крайней мере Slick 3.0.0 это теперь возможно с составными запросами привязки в Slick.

Проверьте этот ответ на аналогичный вопрос: https://stackoverflow.com/a/31352126/3305586

Больше информации о составлении привязанных запросов (дал мне лучшее понимание того, что было сделано в ответе, на который я только что передал ссылку: Scala slick query where in list