Revious
Revious

Reputation: 8156

Oracle: an elegant way to extract record which share a column value

I've found two way to take every record, which shares one column value, among some distinct record set identified each one by a set of WHERE conditions. (The example query are very more clear...)

Do you know a third way more sinthetic? maybe using analytical function?

select a.grup_gruppo_id 
 FROM conf_gruppi_delim a, conf_gruppi_delim b, conf_gruppi_delim c 
 WHERE     a.ASTG_ASSE_TIPO_GRUPPO_ID = 'BASE_TSC'
       AND a.TGAS_TIPGRUPDETT_ASSI_ID = 'C5JqJeruozekiQtN'
       AND a.DELI_VALORE1 = '1RWOoegWqEdL9Vch'
       AND a.DELI_FLAG_ANN = 'N'
       --
       AND b.ASTG_ASSE_TIPO_GRUPPO_ID = 'TIPI_MERCATO'
       AND b.TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_time_f'
       AND b.DELI_VALORE1 = 'ZFLIB'
       AND b.DELI_FLAG_ANN = 'N'
       --
       AND c.ASTG_ASSE_TIPO_GRUPPO_ID = 'SEQUENZA'
       AND c.TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_sefm_f'
       AND c.DELI_VALORE1 = 'LE8IZjuiOHVtxAwi'
       AND c.DELI_FLAG_ANN = 'N'
       --
       AND A.GRUP_GRUPPO_ID = b.GRUP_GRUPPO_ID
       AND b.GRUP_GRUPPO_ID = c.GRUP_GRUPPO_ID 




SELECT GRUP_GRUPPO_ID
  FROM conf_gruppi_delim a
 WHERE     ASTG_ASSE_TIPO_GRUPPO_ID = 'BASE_TSC'
       AND TGAS_TIPGRUPDETT_ASSI_ID = 'C5JqJeruozekiQtN'
       AND DELI_VALORE1 = '1RWOoegWqEdL9Vch'
       AND DELI_FLAG_ANN = 'N'
INTERSECT
SELECT GRUP_GRUPPO_ID
  FROM conf_gruppi_delim a
 WHERE     ASTG_ASSE_TIPO_GRUPPO_ID = 'TIPI_MERCATO'
       AND TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_time_f'
       AND DELI_VALORE1 = 'ZFLIB'
       AND DELI_FLAG_ANN = 'N'
INTERSECT
SELECT GRUP_GRUPPO_ID
  FROM conf_gruppi_delim a
 WHERE     ASTG_ASSE_TIPO_GRUPPO_ID = 'SEQUENZA'
       AND TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_sefm_f'
       AND DELI_VALORE1 = 'LE8IZjuiOHVtxAwi'
       AND DELI_FLAG_ANN = 'N'

Upvotes: 0

Views: 64

Answers (1)

Justin Cave
Justin Cave

Reputation: 231761

In this case where you're just filtering on 3 different sets of values

SELECT GRUP_GRUPPO_ID
  FROM conf_gruppi_delim a
 WHERE (ASTG_ASSE_TIPO_GRUPPO_ID, 
        TGAS_TIPGRUPDETT_ASSI_ID, 
        DELI_VALORE1, 
        DELI_FLAG_ANN )  IN 
    ( ('SEQUENZA','_tgas_sefm_f','LE8IZjuiOHVtxAwi','N'),
      ('TIPI_MERCATO','_tgas_time_f','ZFLIB','N'),
      ('BASE_TSC','C5JqJeruozekiQtN','1RWOoegWqEdL9Vch','N') )
 GROUP BY GRUP_GRUPPO_ID
HAVING COUNT( distinct ASTG_ASSE_TIPO_GRUPPO_ID ) = 3

Upvotes: 1

Related Questions