MySQL IF NOT NULL,则显示1,否则显示0

我正在这里处理一些显示复杂的问题。 我确定有一个IF / ELSEfunction我只是俯瞰。

我有两个表,我查询(客户,地址)。 第一个有主要logging,但第二个可能有或没有logging到左边join。

如果地址表中没有logging,我想显示一个零。 我想只显示1,如果有logging存在。

我到目前为止的尝试:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists FROM customers c LEFT JOIN addresses a ON c.customerid = a.customerid WHERE customerid = 123 

这第一个例子不这样做。 但是我可能正在利用COALESCE错误。

如何显示一个0,如果为null,则为1,如果存在的话?

而不是COALESCE(a.addressid,0) AS addressexists ,使用CASE

 CASE WHEN a.addressid IS NOT NULL THEN 1 ELSE 0 END AS addressexists 

或更简单:

 (a.addressid IS NOT NULL) AS addressexists 

这是有效的,因为TRUE在MySQL中显示为1FALSE0

 SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists FROM customers c LEFT JOIN addresses a ON c.customerid = a.customerid WHERE customerid = 123 

小心如果你是从C / C ++来的,并期待这个工作:

 select if(name, 1, 0) .. 

即使'name'不是NULL,与C不同,false条件仍然会触发,并且上面的语句返回0.因此,您必须记住显式检查NULL或空string:

  select if(name is null or name = '', 0, 1) 

PS Eugen上面的例子是正确的 ,但我想澄清这个细微差别,因为它让我吃惊。

 SELECT c.name, CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists FROM customers c LEFT JOIN addresses a ON c.customerid = a.customerid WHERE customerid = 123 

没有WHERE的另一种方法,试试这个..

将select空值和空值

 SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename 

如果它是一个空string,它将设置为null,然后也是如此。