oracle select 条件查询

图片说明
select *
from PD.pm_prod_ver_info t
where t.product_offering_id IN (1, 2, 3, 4,20)
AND t.version LIKE '0._'
如图所示,上述select语句,我要以1, 2, 3, 4,20作为条件去查询。既查出来的值一定是1, 2, 3, 4,20,他的子串,如1,2,3,4不需要查出。请问sql怎么写

如1,2,3,4不需要查出? 是什么意思?

你是要查版本号是最新的数据的吧?

select *
from PD.pm_prod_ver_info t
where t.product_offering_id IN (1, 2, 3, 4,20)
and t.version = (select max(version) from PD.pm_prod_ver_info where product_offering_id IN (1, 2, 3, 4,20))
select *
  from PD.pm_prod_ver_info t
  JOIN (    SELECT prod_ver_id,
                   COUNT(*) count1,
                   COUNT(DISTINCT product_offering_id) count2
              FROM PD.pm_prod_ver_info
          GROUP BY prod_ver_id
       ) s
    ON t.prod_ver_id = s.prod_ver_id
 where t.product_offering_id IN (1, 2, 3, 4, 20)
   AND t.version LIKE '0._'
   AND s.count1 = 5
   AND s.count2 = 5

就是加上一个 prod_ver_id 分组下 product_offering_id 正好这5个的判断。
注:如果一个 prod_ver_id 分组下 product_offering_id 不会重复/重复也要,只要留 count2 就行。

試下下面sql可不可以。

WITH TMP_TABLE1 AS (
        SELECT PROD_VER_ID
          FROM PM_PROD_VER_INFO
         GROUP BY PROD_VER_ID
        HAVING COUNT(PROD_VER_ID) = 5
         ) 
SELECT T.*
  FROM PM_PROD_VER_INFO T
 WHERE T.PRODUCT_OFFERING_ID IN (1,2,3,4,20)
   AND EXISTS(
        SELECT PROD_VER_ID
          FROM TMP_TABLE1
         WHERE T.PROD_VER_ID = PROD_VER_ID)
   AND T.VERSION LIKE '0._'