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中显示为1
在FALSE
为0
。
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,然后也是如此。