Я просматриваю адреса из одной таблицы от пользователя, основываясь на электронной почте пользователя из другой таблицы, затем беру полученный список адресов и проверяю, есть ли у адреса атрибут, который хранится в третьей таблице. Атрибут может существовать или не существовать в третьей таблице. Если это произойдет, я хочу, чтобы 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