【问题标题】:DB2 -Clause IN-Multiple ValueDB2 - 子句 IN- 多值
【发布时间】:2021-09-26 14:11:06
【问题描述】:

当列“generated_key”返回一个值时,以下代码可以正常工作

代码在哪里(SELECT generated_key FROM List_agg)

CODE generated_key
EU00100ST10000016 EU00100ST10000016

但是当列 generate_key 包含多个值时,它返回 0 行

CODE generated_key
EU00100ST10000016 EU00100ST10000016, EU00100ST10000017

【问题讨论】:

  • “SELECT generated_key FROM List_agg”是返回多条记录还是一条记录包含多个值?
  • 它返回一条记录,其中包含用逗号分隔的多个值
  • OK - 那行不通。 IN 需要一个对象名称列表,但您传递的是一个字符串。你能写一个 SELECT 语句来返回你想要的代码值列表(即多条记录)吗?例如WHERE 代码(从 some_table 中选择 DISTINCT 代码)

标签: sql database db2


【解决方案1】:

如果您需要与列表进行比较,请使用分隔比较

WHERE EXISTS (SELECT 1
              FROM list_agg
              WHERE ',' || generated_key || ',' LIKE '%,' || code ',%' 
             )

“list_agg”名称表明您正在聚合来自另一个查询的值。如果是这样,您也许可以使用 in 而不进行聚合。但是你的问题没有足够的细节来知道是否真的如此。

【讨论】:

  • list_agg 是这样创建的:使用 List_agg AS (select 'EU' AS instance,LISTAGG(CAST(instanceCode AS varchar(1024)),',') WITHIN GROUP(ORDER BY instanceCode) AS generated_key FROM table1 GROUP BY 实例)
  • 谢谢你,Gordon,它就像你说的那样工作。但我不明白为什么它不能使用简单的 in 。如果你能向我解释一下。最好的问候
  • @PTC86 。 . .因为LIST_AGG() 返回的逗号分隔字符串是单个字符串值,而不是用于比较的单独值列表。
  • 也许这是一个愚蠢的问题,但是如何将 LIST_AGG() 返回的结果转换为一个单独的值列表?
  • @PCT86 。 . .不要使用LIST_AGG(),只需将INEXISTS 与子查询一起使用。
猜你喜欢
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多