i have this query
SELECT
CASE WHEN EXISTS (SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI')
THEN p2.PARM_VALUE
ELSE p1.PARM_VALUE
END as RIGHE
FROM
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '0000' OR ENTE_CD = 'XXXX')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p1,
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p2
Basically i want to return the Value of the second query when the second query hase at least one row otherwise return the result of the first query. Right now these are the return values:
SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI' //No retrun
SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '0000' OR ENTE_CD = 'XXXX')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI' //returns 10
SELECT
CASE WHEN EXISTS (SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI')
THEN p2.PARM_VALUE
ELSE p1.PARM_VALUE
END as RIGHE
FROM
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '0000' OR ENTE_CD = 'XXXX')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p1,
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p2 //no return, i was expecting 10
what am i doing wrong in the CASE statement?
Your existing query has an implied cartesian join between the two sub-queries – this means that where one query returns n rows and the other returns m rows, you will see a total of m * n rows returned – ie. every combination of rows from the first set with rows from the second set.
So if you have 0 rows being returned in either set, you will see 0 rows being returned in total.
Assuming neither query should return more than one row, then probably the simplest version of the amended query might be as follows: