【问题标题】:how to pass an unknown size Array to sql statement in groovy.sql.Sql如何将未知大小的数组传递给 groovy.sql.Sql 中的 sql 语句
【发布时间】:2021-04-14 16:40:17
【问题描述】:

我想使用Groovy sql 创建一个简单的查询,并将一个大小未知的 id 列表传递给它。 例子: 这很好用

List<Long> userIds = sql.rows('SELECT id FROM users').collect { it.id }

但是我怎样才能传递 userIds 并找到学校

List<Long> schoolIds = sql.rows('SELECT id FROM school WHERE id IN (?)', userIds).collect { it.id }

这不起作用。

【问题讨论】:

  • 这可能取决于您的数据库。例如,我认为 Postgres 支持ANY(?)。您需要支持哪些数据库方言?
  • 你也可以使用(有积极的副作用)只有一个查询SELECT id FROM school WHERE id IN (SELECT id FROM users)

标签: sql grails groovy


【解决方案1】:

对于通用数据库,如果 userIds 列表不是很大,这应该可以工作

def query = 'SELECT id FROM school WHERE id IN (' + userIds.collect{'?'}.join(',') + ')'
sql.rows(query, userIds)

【讨论】:

  • 我也做过同样的事情。关于如何在不创建额外字符串的情况下做到这一点的任何想法?因为 id 可能是一个非常大的列表
  • 你的数据库服务器是什么?它特定于每个数据库。如果列表很长,请考虑不同的查询,例如select * from B where A_ID in ( select A_ID from A )。没有理由从 db 获取大列表并将其发送回 db...
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2011-08-07
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多