大小写的SQL设置值取决于值是否存在

时间:2019-05-03 23:24:40

标签: sql mariadb

我正在根据用户来自另一个表的电子邮件从一个表中查找地址,然后获取结果的地址列表,并检查该地址是否具有存储在第三张表中的属性。该属性在第三张表上可能存在也可能不存在。如果可以,我希望sql打印出“属性存在”,如果不可以,则打印出“属性不存在”

属性通过地址ID链接到地址,而用户通过用户ID链接到地址。

这是我到目前为止所拥有的:

    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中。如果包含它,则我尝试从循环中获取此信息的3个地址的次数与我在表c中存储的属性的数量相同(在这种情况下,是10倍,因为表c中有10条记录,所以当我只想要3时,我得到30个结果。

我不能过滤表c中的结果,因为可能不匹配,但是我想用任何一种方式打印结果。对于选择情况,我也需要表c。如果我摆脱了表c,那么只会显示我想要结果显示的三个地址,但是我无法比较表c中的值。

简而言之,这就是我需要打印的内容:

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

1 个答案:

答案 0 :(得分:1)

我认为这样写您的查询会更容易理解

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'

您可以将bc一起加入。如果c.attribute=100是因为记录已合并,所以如果没有,则此字段将始终为NULL。 我之所以加入distinct是因为与c的左侧联接。