Как построить запрос WHERE из строки идентификаторов, разделенных запятыми?

Я хотел бы иметь возможность создать один запрос, который принимает строку uuid и разбивает ее запятыми для генерации следующего оператора sql:

UUID

4506ef72-aa17-452b-9456-38d11c71897b,bd46629d-0e8c-4d70-874a-76bfade8ef14,b0c11580-7cde-4a4e-ba0a-30f9de52e3b5

SQL

SELECT * FROM my-table WHERE uuid="4506ef72-aa17-452b-9456-38d11c71897b" OR bd46629d-0e8c-4d70-874a-76bfade8ef14 OR b0c11580-7cde-4a4e-ba0a-30f9de52e3b5 ORDER BY created DESC;

Я попытался сгенерировать этот запрос с помощью sqlkorma в следующем методе, однако у меня возникла проблема при создании предложения WHERE.

(defn fetch [uuid]
  (->
    (korma/select* :my-table)
    (korma/order :created :DESC)

    (as-> query
          (if (not= uuid nil)
            (for [id (str/split uuid #",")]
              (korma/where query {:uuid id}))
            query))
    (korma/query-only))
)

1 ответ

Решение

Попробуйте это:

(defn fetch [uuid]
  (-> (korma/select* :my-table)
      (korma/order :created :DESC)
      (korma/where {:uuid [in (str/split uuid #",")]})
      (korma/query-only)))

Вместо ORв условиях, это использует IN,

(println (korma/as-sql (fetch "x,x,x")))
SELECT "my-table".* FROM "my-table" WHERE ("my-table"."uuid" IN (?, ?, ?)) ORDER BY "my-table"."created" DESC
Другие вопросы по тегам