SQL устанавливает значение для регистра в зависимости от того, существует ли значение - PullRequest
0 голосов
/ 04 мая 2019

Я просматриваю адреса из одной таблицы от пользователя, основываясь на электронной почте пользователя из другой таблицы, затем беру полученный список адресов и проверяю, есть ли у адреса атрибут, который хранится в третьей таблице. Атрибут может существовать или не существовать в третьей таблице. Если это произойдет, я хочу, чтобы sql распечатал «Атрибут существует», а если нет, распечатал «Атрибут не существует»

Атрибут связан с адресом по идентификатору адреса, а пользователь связан с адресом по идентификатору пользователя.

Вот что у меня есть:

    select b.street, case
        when c.entity_id = b.entity_id and c.attribute_id = 100 then 'Attribute Exists'
        else 'Attribute Doesn't Exist'
    end as isValue
    from customer_entity as a, //Customer Details
    customer_address_entity as b, //Address Details
    customer_address_entity_int as c //Address Attribute
    where a.email = 'customeremail@example.com'
      and a.entity_id = b.parent_id

Проблема, с которой я столкнулся при данной настройке, приведена в таблице c. Если я включу его, то три адреса, которые я пытаюсь получить из цикла, получают такое же количество раз, что и количество атрибутов, которые я сохранил в таблице c (в этом случае 10 раз по сравнению с 10 записями в таблице c, так что я получаю 30 результатов, когда хочу только 3).

Я не могу отфильтровать результаты в таблице c, так как совпадения могут быть или не быть, но я хочу напечатать результат в любом случае. Мне также нужна таблица c для выбранного случая. Если я избавлюсь от таблицы c, то появятся только три адреса, результаты которых мне нужны, но я не смогу сравнить значения в таблице c.

Короче, вот что мне нужно распечатать:

street          isValue
Street 1        Attribute Exists  
Street 2        Attribute Exists
Street 3        Attribute Doesn't Exist

1 Ответ

1 голос
/ 04 мая 2019

Я думаю, что ваш запрос будет легче понять, если написать так:

select distinct
  b.street, 
  case 
    when c.attribute_id = 100 then 'Attribute Exists'
    else 'Attribute Doesn''t Exist'
  end as isValue
from customer_entity as a //Customer Details
  join customer_address_entity as b //Address Details
    on a.entity_id = b.parent_id
  left join customer_address_entity_int as c //Address Attribute
    on c.entity_id = b.entity_id
where a.email = 'customeremail@example.com'

Вы можете присоединиться к b с c. Если c.attribute=100, то это потому, что записи объединены, поэтому если нет, то это поле будет всегда NULL. Я включил distinct из-за левого соединения с c.

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