Ho query MySQL in cui ho bisogno di sostituire il valore nella clausola WHERE se subquery restituisce non ha prodotto risultati o di valore nullo.MySQL verificare se subquery ritorno NULL, quindi sostituire il valore
interrogazione prezzo che funziona come richiesto
viene eseguito correttamente
SELECT `prices` FROM `pricing`
WHERE (3 BETWEEN `from_unit` AND `to_unit`)
AND `type` = 1
AND `id_pricing` IN
(
SELECT v1.`id_pricing` FROM `values` AS v1
INNER JOIN `values` AS v2 ON v1.`id_pricing` = v2.`id_pricing`
INNER JOIN `values` AS v3 ON v1.`id_pricing` = v3.`id_pricing`
INNER JOIN `values` AS v4 ON v1.`id_pricing` = v4.`id_pricing`
WHERE v1.`id_attribute` = 1 AND v1.`id_value` = 1
AND v2.`id_attribute` = 7 AND v2.`id_value` = 63
AND v3.`id_attribute` = 8 AND v3.`id_value` = 87
AND v4.`id_attribute` = 12 AND v4.`id_value` = 143
)
quando modifico questa query come qui di seguito, l'aggiunta di controllo IFNULL su sottoquery all'interno clausola, si genera un errore
'Errore SQL (1242): sottoquery restituisce più di 1 riga'
SELECT `prices` FROM `pricing`
WHERE (3 BETWEEN `from_unit` AND `to_unit`)
AND `type` = 1
AND `id_pricing` IN
( IFNULL (
( SELECT v1.`id_pricing` FROM `values` AS v1
INNER JOIN `values` AS v2 ON v1.`id_pricing` = v2.`id_pricing`
INNER JOIN `values` AS v3 ON v1.`id_pricing` = v3.`id_pricing`
INNER JOIN `values` AS v4 ON v1.`id_pricing` = v4.`id_pricing`
WHERE v1.`id_attribute` = 1 AND v1.`id_value` = 1
AND v2.`id_attribute` = 7 AND v2.`id_value` = 63
AND v3.`id_attribute` = 8 AND v3.`id_value` = 87
AND v4.`id_attribute` = 12 AND v4.`id_value` = 143
),
'1234'
)
)
Ho provato sostituendo IFNULL con COALESCE ancora lo stesso risultato. Sto usando una sintassi sbagliata.
Perché non 'SELEZIONA IFNULL (v1.id_pricing, '1234')' nel subquery? –
Ecco un problema simile con una soluzione: http://stackoverflow.com/questions/9861171/how-to-resolve-this-in-mysql-1242-subquery-returns-more-than-1-row – Gimmy
I' m confuso da quella subquery. Cosa dovrebbe fare? Prendi in considerazione la possibilità di fornire un numero di serie tramite dimostrazione – Strawberry