sql >> Databáze >  >> RDS >> Oracle

Oracle:Získejte dotaz, který vždy vrátí přesně jeden řádek, i když nejsou k dispozici žádná data

Existují způsoby, jak to udělat jednodušší a čistší, ale toto v podstatě vysvětluje techniku:

SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id

UNION ALL

SELECT NULL AS data_name
FROM dual
WHERE NOT EXISTS (
    SELECT data_name
    FROM data_table
    WHERE data_table.type = v_t_id
)

Když je první část sjednocení prázdná, druhá bude obsahovat řádek, když první část není prázdná, druhá nebude obsahovat žádné řádky.

Pokud dotaz trvá příliš dlouho, použijte tento:

SELECT * FROM (  
    SELECT data_name
    FROM data_table
    WHERE data_table.type = v_t_id

    UNION ALL

    SELECT NULL AS data_name
    FROM dual
  ) WHERE data_name is not null or ROWNUM = 1


  1. Problém při porovnávání výsledku to_char(myDate, 'DAY') s řetězcem

  2. Server vs zdroj dat v připojovacím řetězci

  3. mysql union ve výsledku špatné sloupce

  4. jak používat regexp_like Oracle v Hibernate HQL?