sqlite如果没有返回行打印0

时间:2012-07-16 17:21:36

标签: sqlite

我有以下查询:

 SELECT user_tag, device_type,  ip_address

 FROM
 devices 

 WHERE (user_tag like '|%frt%|'
 OR user_tag like '|%bck%|'
 OR user_tag like '|%ppp%|'
 OR user_tag like '|%smes%|'
 OR user_tag like '|%gm%|')

现在,如果仅为user_tag'frt'返回记录,我只收到一行(如您所料)。有没有办法为空行设置默认值,例如,对于不返回任何实际数据的行,我会收到值'0'或类似值?

2 个答案:

答案 0 :(得分:1)

此查询是“粗略草稿”。由于我使用所有类型的SQL,有时我遇到SQLite特定语法的问题,我现在没有任何方法来测试此查询,因此可能需要进行一些语法修改。

但它可以让这个想法交叉...... 使用您的硬编码值列表,将其设为子查询并在其上进行左连接而不是在哪里。

当没有给定类型的用户标签时,

user_tag_exists应为0。

Select CASE WHEN d.user_tag is null THEN '0' ELSE '1' END AS user_tag_exists,
       tagTypes.tagType,
       d.user_tag, d.device_type, d.ip_address
From
(
    Select '%frt%' as tagType
    UNION
    Select '%bck%' as tagType
    UNION
    Select '%ppp%' as tagType
    UNION
    Select '%smes%' as tagType
    UNION
    Select '%gm%' as tagType
) as tagTypes
left join
    devices d
        on d.device_type like tagTypes.tagType

答案 1 :(得分:0)

我不确定你是否愿意:

  1. 列中的值为“0”而不是null
  2. 如果是'0'的行 没有user_tag就像一个值。
  3. 如果您正在寻找1),您可以使用CASE声明。

     SELECT 
            user_tag, 
            CASE WHEN device_type is not null THEN device_type ELSE '0' END as device_type, 
            ip_address
    
     FROM
     devices 
    
     WHERE (user_tag like '|%frt%|'
     OR user_tag like '|%bck%|'
     OR user_tag like '|%ppp%|'
     OR user_tag like '|%smes%|'
     OR user_tag like '|%gm%|')
    

    即使 device_type 为空,这也会为您提供 device_type 为'0'。