Ich habe MySQL-Abfrage, wo ich Wert in WHERE-Klausel ersetzen muss, wenn Unterabfrage keine Ergebnisse oder null Wert zurückgibt.MySQL überprüfen, ob Unterabfrage NULL zurückgeben, dann ersetzen Wert
Preisabfrage, die
nach BedarfLäuft arbeitet erfolgreich
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
)
, wenn ich wie unten diese Abfrage ändern, IFNULL Prüfung auf Unterabfrage innerhalb IN-Klausel hinzufügen, wirft es Fehler
'SQL Error (1242): Unterabfrage gibt mehr als 1 Zeile zurück'
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'
)
)
Ich versuchte, IFNULL mit COALESCE immer noch das gleiche Ergebnis zu ersetzen. Benutze ich falsche Syntax.
Warum nicht SELECT IFNULL (v1.id_pricing, '1234') 'in der Unterabfrage? –
Hier ist ein ähnliches Problem mit einer Lösung: http://stackoverflow.com/questions/9861171/how-to-resolve-this-in-mysql-1242-subquery-returns-more-than-1-row – Gimmy
I ' Ich bin verwirrt von dieser Unterabfrage. Was soll es tun? Erwägen Sie die Bereitstellung eines SQLFiddle als Demonstration – Strawberry