我有这样一个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小提琴:单击此处
现在,我尝试获取一个is列表,其中键不是60或键为60,值= 8。
select * from items_attributes where (key != 60) OR (key = 60 AND value = 8);我得到那些键不是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的解决方案,但我对tbh一无所知。也许有人能在这里帮我。
提前感谢!
向你问好,安德烈亚斯
发布于 2018-04-09 12:38:37
不如:
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发布于 2018-04-09 12:25:49
我不知道你怎么能得到三排。然而,以下查询:
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;

https://stackoverflow.com/questions/49732422
复制相似问题