SQL ЕСЛИ значение не найдено, добавьте пустое значение vlaue - PullRequest
0 голосов
/ 28 мая 2020

Мне нужна помощь с вопросом, пожалуйста.

SELECT wp_mailster_subscribers.`email` AS 'Email',
    Firstname_Table.`meta_value` AS 'Firstname',
    Lastname_Table.`meta_value` AS 'Lastname',
    FROM_UNIXTIME(wp_mailster_lists_subscribers.`added`,"%Y-%m-%d") AS 'Date Added',
    wp_mailster_status.`status` AS 'Status'
FROM wp_mailster_fa_details


INNER JOIN wp_mailster_lists_subscribers
    ON wp_mailster_lists_subscribers.`list_id` = wp_mailster_fa_details.`mailing_list`  
INNER JOIN wp_mailster_subscribers
    ON wp_mailster_lists_subscribers.`subscriber_id` = wp_mailster_subscribers.`ID`

INNER JOIN wp_mailster_subscriber_fields AS Firstname_Table
    ON wp_mailster_lists_subscribers.`subscriber_id` = Firstname_Table.`subscriber_id`
INNER JOIN wp_mailster_subscriber_fields AS Lastname_Table
    ON wp_mailster_lists_subscribers.`subscriber_id` = Lastname_Table.`subscriber_id`

INNER JOIN wp_mailster_status
    ON wp_mailster_subscribers.`status` = wp_mailster_status.`status_id`

WHERE wp_mailster_fa_details.`username` = '%CURRENT_USER_LOGIN%'
AND Firstname_Table.`meta_key` = 'firstname'
AND Lastname_Table.`meta_key` = 'lastname'

Моя проблема связана с именем и фамилией, если они пустые, их не существует. Следовательно, если они не существуют, вся строка не отображается.

Как мне заставить отображать пустое значение вместо отображения всей строки?

Например:

| Email      | Firstname    | Lastname     |   Status  |
--------------------------------------------------------
| some@email | John         |  Dirt        |  Active   |
| else@email |              |              |  Active   |

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Вы описываете left join s:

SELECT wp_mailster_subscribers.`email` AS 'Email',
    Firstname_Table.`meta_value` AS 'Firstname',
    Lastname_Table.`meta_value` AS 'Lastname',
    FROM_UNIXTIME(wp_mailster_lists_subscribers.`added`,"%Y-%m-%d") AS 'Date Added',
    wp_mailster_status.`status` AS 'Status'
FROM wp_mailster_fa_details
LEFT JOIN wp_mailster_lists_subscribers
    ON wp_mailster_lists_subscribers.`list_id` = wp_mailster_fa_details.`mailing_list`  
LEFT JOIN wp_mailster_subscribers
    ON wp_mailster_lists_subscribers.`subscriber_id` = wp_mailster_subscribers.`ID`
LEFT JOIN wp_mailster_subscriber_fields AS Firstname_Table
    ON wp_mailster_lists_subscribers.`subscriber_id` = Firstname_Table.`subscriber_id`
    AND Firstname_Table.`meta_key` = 'firstname'
LEFT JOIN wp_mailster_subscriber_fields AS Lastname_Table
    ON wp_mailster_lists_subscribers.`subscriber_id` = Lastname_Table.`subscriber_id`
    AND Lastname_Table.`meta_key` = 'lastname'
LEFT JOIN wp_mailster_status
    ON wp_mailster_subscribers.`status` = wp_mailster_status.`status_id`
WHERE wp_mailster_fa_details.`username` = '%CURRENT_USER_LOGIN%'

Примечания на полях:

  • не используйте одинарные кавычки для идентификаторов - они должны быть зарезервированы для буквальных строк только

  • использовать одинарные кавычки вместо двойных кавычек для идентификаторов

  • псевдонимы таблиц упрощают чтение и запись запроса

  • вам обычно не нужны обратные кавычки вокруг идентификаторов столбцов

Я бы сформулировал ваш запрос как:

SELECT ms.email
    msf1.meta_value AS Firstname,
    msf2.meta_value AS Lastname,
    FROM_UNIXTIME(ls.added,'%Y-%m-%d') AS Date Added,
    mst.status AS Status
FROM wp_mailster_fa_details fd
LEFT JOIN wp_mailster_lists_subscribers ls
    ON ls.list_id = fd.mailing_list  
LEFT JOIN wp_mailster_subscribers ms
    ON ls.subscriber_id = ms.ID
LEFT JOIN wp_mailster_subscriber_fields AS msf1
    ON ls.subscriber_id = msf1.subscriber_id
    AND msf1.meta_key = 'firstname'
LEFT JOIN wp_mailster_subscriber_fields AS msf2
    ON ls.subscriber_id = msf2.subscriber_id
    AND msf2.meta_key = 'lastname'
LEFT JOIN wp_mailster_status
    ON ms.status = mst.status_id
WHERE fd.username = '%CURRENT_USER_LOGIN%'
0 голосов
/ 28 мая 2020

вы можете изменить свой запрос для выбора только полей Not NULL

ex -:

SELECT wp_mailster_subscribers.`email` AS 'Email',
    Firstname_Table.`meta_value` AS 'Firstname',
    Lastname_Table.`meta_value` AS 'Lastname',
    FROM_UNIXTIME(wp_mailster_lists_subscribers.`added`,"%Y-%m-%d") AS 'Date Added',
    wp_mailster_status.`status` AS 'Status'
FROM wp_mailster_fa_details WHERE Firstname IS NOT NULL AND Lastname IS NOT NULL;
0 голосов
/ 28 мая 2020

Просто используйте isnull:

SELECT ISNULL (Firstname, '') ... et c

Ссылка для получения дополнительной информации: https://javarevisited.blogspot.com/2015/10/how-to-replace-null-with-empty-string-in-SQL-SERVER-isnull-collesce-example.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...