在 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 检测动态媒体查询而不在脚本中硬编码断点宽度?