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._'