简体   繁体   English

如何用逗号分隔的ID字符串构建WHERE查询?

[英]How to build a WHERE query from a comma delimited string of ids?

I would like to be able to build one query which takes a string of uuid's and spiting it out by commas to generate the following sql statement: 我希望能够构建一个查询,该查询采用一串uuid并用逗号将其吐出以生成以下sql语句:

uuid UUID

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

sql 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;

I have attempted generating this query using sqlkorma in the following method, however I am having a problem generating the WHERE clause. 我试图在以下方法中使用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))
)

Give this a try: 试试看:

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

Instead of OR -ing the conditions, this uses IN . 代替对条件进行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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM