>> The above result is of course 1!! <<I think you are looking for Relational Division.>>The first select will always have a variable number instead of 100<<No problem, you can use variable instead of constant expression.Try it:SELECT group_idFROM groupTableGROUP BY group_idHAVING COUNT(DISTINCT CASE WHEN ind_id IN (1, 2, 3, 4) THNE ind_id ELSE NULL END) = 4 ;
Or the numbers are in the first query:SELECT group_idFROM groupTableWHERE ind_id IN (SELECT SELECT ID FROM indicator_Table WHERE field2 = 100)GROUP BY group_idHAVING COUNT(DISTINCT ind_id) = (SELECT COUNT(*) FROM indicator_Table WHERE field = 100) ;
Or with JOIN and Aggregate Window Function:SELECT group_idFROM groupTable AS g INNER JOIN (SELECT COUNT(*) OVER() AS cnt, ID FROM indicator_Table WHERE field = 100) AS iON g.ind_id = i.IDGROUP BY group_idHAVING COUNT(DISTINCT ind_id) = MAX(cnt) ;
Or:SELECT group_idFROM(SELECT group_id, COUNT(DISTINCT ind_id) AS cntFROM groupTableWHERE ind_id IN (SELECT ID FROM indicator_Table WHERE field2 = 100)GROUP BY group_id) DJOIN(SELECT COUNT(*)FROM indicator_TableWHERE field2 = 100) AS DD(cnt)ON D.cnt = DD.cnt ;
______________________