Удаление нулевого значения в SQL операторах JOIN и UNION в SQL
[решено] как удалить нулевое значение только в поле provider_order только, в моем случае таблица использовала JOIN Table и UNION
Вот моя схема базы данных и мой SQL-запрос
Http://sqlfiddle.com/#! 9 / f77862/2
Для ясного описания здесь я прилагаю картинку
3 ответа:
Вы не можете удалить только это поле в строке. Однако вы можете избавиться от всей строки, просто используя предложение WHERE для фильтрации записей со значениями null.
Http://sqlfiddle.com/#! 9 / f77862/42
SELECT m.provider_id, m.provider_name, p.purchase_order_code, NULL AS purchase_order_sample_code, p.provider_id AS provider_order FROM mst_provider AS m LEFT JOIN trx_purchase_order AS p ON (m.provider_id = p.provider_id) WHERE p.provider_id != NULL UNION SELECT m.provider_id, m.provider_name, p.purchase_order_code, NULL AS purchase_order_sample_code, p.provider_id AS provider_order FROM mst_provider AS m RIGHT JOIN trx_purchase_order AS p ON (m.provider_id = p.provider_id) UNION SELECT m.provider_id, m.provider_name, NULL, s.purchase_order_sample_code, s.provider_id FROM mst_provider AS m RIGHT JOIN trx_purchase_order_sample AS s ON (s.provider_id = m.provider_id)
Что вы подразумеваете под удалением? Удаление всей строки или просто отображение чего-то другого, кроме NULL в provider_order. Если вы ищете позже, то вы можете использовать COALESCE
Edit: внесены изменения только в скрипку: http://sqlfiddle.com/#! 9 / f77862/46
Я предполагаю, что вы хотите отфильтровать, где provider_order равен null?
Я завернул весь ваш запрос в подзапрос и поместил предложение where в конце, возвращая только записи, где provider_order не равен null.
Http://sqlfiddle.com/#! 9 / f77862/50/0
SELECT * FROM ( SELECT m.provider_id, m.provider_name, p.purchase_order_code, NULL AS purchase_order_sample_code, p.provider_id AS provider_order FROM mst_provider AS m LEFT JOIN trx_purchase_order AS p ON (m.provider_id = p.provider_id) UNION SELECT m.provider_id, m.provider_name, p.purchase_order_code, NULL AS purchase_order_sample_code, p.provider_id AS provider_order FROM mst_provider AS m RIGHT JOIN trx_purchase_order AS p ON (m.provider_id = p.provider_id) UNION SELECT m.provider_id, m.provider_name, NULL, s.purchase_order_sample_code, s.provider_id FROM mst_provider AS m RIGHT JOIN trx_purchase_order_sample AS s ON (s.provider_id = m.provider_id) ) _temp WHERE provider_order IS NOT NULL