我有这个SQL Select语句
SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
这是SELECT的结果:
为了限制选定的行,我有几个值存储在其他表中,如下所示:
SELECT xx_insert.XX_DocAction_Next
  FROM xx_insert
  WHERE xx_insert_id = 1000283
所以,我的最终SQL Select是这样的:
SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
AND AD_Ref_List.Value           IN
  (SELECT xx_insert.XX_DocAction_Next
  FROM xx_insert
  WHERE xx_insert_id = 1000283
  )
;
问题:这个SELECT返回没有行,因为Oracle已经像这样转换了:  AD_Ref_List.Value IN ('CO,VO')
但是,我需要的是: AD_Ref_List.Value IN ('CO','VO')
我怎样才能做到这一点???
最好的祝福
将值包含在分隔符列表中使用的分隔符中,然后检查它是否是分隔列表的子字符串(也包含分隔符):
SELECT r.Value
FROM   AD_Ref_List r
       INNER JOIN xx_insert x
       ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' )
WHERE  r.AD_Reference_ID = 1000448
AND    x.xx_insert_id    = 1000283;
我必须将逻辑保留在whereClause中
真的,不要.上述查询将更加高效.
但如果你不得不这样做:
SELECT Value
FROM   AD_Ref_List
WHERE  AD_Reference_ID = 1000448
AND    value IN (
  SELECT REGEXP_SUBSTR( XX_DocAction_Next, '[^,]+', 1, LEVEL )
  FROM   xx_insert
  WHERE  xx_insert_id    = 1000283
  CONNECT BY LEVEL <= REGEXP_COUNT( XX_DocAction_Next, '[^,]+' )
);
| 归档时间: | 
 | 
| 查看次数: | 63 次 | 
| 最近记录: |