0

我有以下查询:

 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”或类似的值?

4

2 回答 2

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
于 2012-07-16T19:02:06.730 回答
0

我不确定你是否想要:

  1. 列中的值“0”而不是 null
  2. 如果不存在类似于值的 user_tag,则为 '0' 的行。

如果您正在寻找 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”。

于 2012-07-16T17:32:42.733 回答