在 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 子句中使用硬编码值和子查询的主要内容,如果未能解决你的问题,请参考以下文章

与硬编码值相比,Oracle SQL In Subquery 花费了太多时间

使用 JavaScript 检测动态媒体查询而不在脚本中硬编码断点宽度?

AWS Api Gateway 硬编码查询字符串参数

如何在 sql 查询中创建空白/硬编码列?

尽量不在 SQL 查询中硬编码日期范围(Python、SQL 服务器)

GCP:与硬编码值相比,从数组中选择查询具有非常大的流程数据要运行