简体   繁体   中英

How to return some predefined value when no row returned from big query with multiple column is selected

My query has multiple column being selected but now i want when no returned I want some dummy value to be returned.

For example in the following query:

SELECT a.abc, b.def, c.ghi
FROM comp a, damp b, champ c, omp d 
WHERE a.id=b.id
      and b.id=c.id
      and c.id= d.id
ORDER BY a.abc desc

if there is no row returned I wanted to display atleast one column with some value, can somebody suggest me how can I achieve this. I have already gone through some suggestion but none worked. Any help would be appreciated.

In oracle you could do something like this:

WITH mybigselect AS
(
SELECT a.abc, b.def, c.ghi
FROM comp a
     JOIN damp b ON a.id = b.id
     JOIN champ c ON b.id = c.id
     JOIN omp d ON c.id = d.id 
ORDER BY a.abc desc  
)
SELECT * FROM mybigselect
UNION ALL
SELECT 'Nothing found', NULL, NULL FROM mybigselect
WHERE NOT EXISTS (SELECT * FROM mybigselect)

Note 1: that both rows in the UNION ALL needs to return columns of the same datatype. You can't return a number in the first column of SELECT * FROM mybigselect and "nothing found" in the query after UNION ALL

Note 2: rewrote the query using ANSI-JOIN style syntax.

I would recommend:

WITH cte as (
      SELECT a.abc, b.def, c.ghi
      FROM comp do JOIN
           damp d
           ON d.id = co.id JOIN
           champ c
           ON ch.id = d.id
           omp o
           ON o.id = ch.id
     )
SELECT *
FROM cte
UNION ALL
SELECT 'Some value', NULL, NLL
FROM dual
WHERE NOT EXISTS (SELECT 1 FROM cte)
ORDER BY abc DESC;

Notes:

  • The value has to be compatible with the type of the column. So, if abc is not a string, then 'Some value' is not appropriate. You haven't provided enough information to determine what value should be in which column.
  • The ORDER BY should be in the outermost query, not the CTE.
  • Never use comas in the FROM clause. Always use proper, explicit, standard , readable JOIN syntax.
  • This version uses meaningful table aliases (table name abbreviations) rather than arbitrary letters.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM