SQLITE 检查 id 是不是具有特定值
Posted
技术标签:
【中文标题】SQLITE 检查 id 是不是具有特定值【英文标题】:SQLITE check if id has certain valueSQLITE 检查 id 是否具有特定值 【发布时间】:2018-04-09 11:58:19 【问题描述】:我有一个这样的 SQLITE 表:
id key value
244574 16 999
244574 18 999
244574 54 174
214808 16 662
214808 17 808
214808 33 1
214808 60 2
214809 16 902
214809 17 1103
214809 33 1
214809 60 2
218965 19 808
218965 21 662
218965 33 1
218965 60 8
218966 19 1103
218966 21 902
218966 33 1
218966 60 8
小提琴:click here
现在我尝试获取键不是 60 或键为 60 且值 = 8 的 ID 列表。当我做一个简单的操作时:
select * from items_attributes where (key != 60) OR (key = 60 AND value = 8);
我得到了 key 不是 60 的那些行。但我只想得到三行作为结果:
id key value
244574 [16;18;54] [999;999;174]
218965 [19;21;33;60] [808;662;1;8]
218966 [19;21;33;60] [1103;902;1;8]
由于我是 SQL 的初学者,所以我只能想到一个使用 concat 的解决方案,但我不知道。也许有人可以在这里帮助我。
提前致谢!
最好的问候, 安德烈亚斯
【问题讨论】:
【参考方案1】:怎么样:
select
id,
'[' || group_concat(key, ';') || ']',
'[' || group_concat(value, ';') || ']'
from items_attributes
group by id
having
-- no rows with key 60 for this id
count(case when key = 60 then 1 end) = 0
or
-- 1 or more rows with key 60 & value 8 for this id
count(case when key = 60 and value = 8 then 1 end) > 0
【讨论】:
太棒了,这正是我想要的。非常感谢!【参考方案2】:我不确定您希望如何只获得三行。但是,以下查询:-
SELECT
id,
'['||group_concat(key,';')||']' AS key_group,
'['||group_concat(value,';')||']' AS value_group
FROM items_attributes
WHERE (key != 60) OR (key = 60 AND value = 8)
GROUP BY id;
结果:-
我现在明白了。这似乎可以满足您的要求:-
SELECT
id,
'['||group_concat(key,';')||']' AS key,
'['||group_concat(value,';')||']' AS value
FROM items_attributes WHERE id NOT IN(
SELECT id FROM items_attributes WHERE (key = 60 AND value != 8))
GROUP by id ORDER BY id DESC;
【讨论】:
嗨,迈克,感谢您的回答。这看起来相当不错。但是仍然存在键为 60 且值为 != 8 的 ID。因此不应返回前两行。以上是关于SQLITE 检查 id 是不是具有特定值的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 List<T> 元素是不是包含具有特定属性值的项目