Tôi có truy vấn mysql nơi tôi cần thay thế giá trị trong mệnh đề WHERE nếu truy vấn con trả về không có kết quả hoặc giá trị null.MySQL kiểm tra nếu subquery trả về NULL, sau đó thay thế giá trị
Giá truy vấn mà làm việc theo yêu cầu
chạy thành công
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
)
khi tôi sửa đổi truy vấn này như dưới đây, thêm séc IFNULL trên subquery bên khoản IN, nó throws lỗi
'Lỗi SQL (1242): Truy vấn con trả về nhiều hơn 1 hàng'
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'
)
)
Tôi đã thử thay thế IFNULL bằng COALESCE vẫn là kết quả tương tự. Tôi có sử dụng cú pháp sai không.
Tại sao không 'CHỌN IFNULL (v1.id_pricing, '1234') 'trong truy vấn phụ? –
Đây là vấn đề tương tự với giải pháp: http://stackoverflow.com/questions/9861171/how-to-resolve-this-in-mysql-1242-subquery-returns-more-than-1-row – Gimmy
Tôi ' m bối rối bởi truy vấn con đó. Nó phải làm gì? Xem xét việc cung cấp một sqlfiddle bằng cách trình diễn – Strawberry