我有以下查询:
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'或类似值?
答案 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),您可以使用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'。