Удаление нулевого значения в SQL операторах JOIN и UNION в SQL


[решено] как удалить нулевое значение только в поле provider_order только, в моем случае таблица использовала JOIN Table и UNION

Вот моя схема базы данных и мой SQL-запрос

Http://sqlfiddle.com/#! 9 / f77862/2

Для ясного описания здесь я прилагаю картинку

Красная линия-это круг, который должен быть удален

3 4

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