在 IN 子句中使用硬编码值和子查询

Posted

技术标签:

【中文标题】在 IN 子句中使用硬编码值和子查询【英文标题】:Using a hard coded value and sub query in an IN clause 【发布时间】:2014-02-24 17:39:19 【问题描述】:

我有这个问题:

SELECT *
FROM Parent.Table
WHERE Ref_Num IN ('4205' or (SELECT Ref_Num FROM Child.Table WHERE Ref_Num ='234'))
AND Asset_Type IN ('PUMPS','COLL')

此查询无效。子查询返回 53 行,而不是输入所有子引用编号,有一种方法可以将它们与父编号 '4205' 一起放入查询中。

谢谢。

【问题讨论】:

试试UNION,比如SELECT 4205 UNION ALL /*Your Query*/ 【参考方案1】:

也许你可以尝试类似的东西

SELECT *
  FROM Parent.Table
  WHERE Ref_Num In (SELECT Ref_Num
                      FROM Child.Table
                      WHERE Ref_Num ='234'
                    UNION
                      SELECT '4205' As Ref_Num
                        FROM SYSIBM.SYSDUMMY1)
    AND Asset_Type IN ('PUMPS','COLL')

请注意,SYSDUMMY1 是一个 EBCDIC 表。如果您需要 ASCII,请使用 SYSDUMMYA。如果您需要 Unicode,请使用 SYSDUMMYU。

分享和享受。

【讨论】:

鉴于他没有使用虚拟表中包含的值,该字段的编码是什么有关系吗?或者如果您引用该表,优化器会自动转换吗?【参考方案2】:

是的,使用联合查询

 select 4205 ref_num
 from some_small_table
 union
 select ref_num
 from child.table
 etc

【讨论】:

这不能用作过滤器,仅返回具有我想要的参考编号的记录。它只是添加到返回的行。

以上是关于在 IN 子句中使用硬编码值和子查询的主要内容,如果未能解决你的问题,请参考以下文章