我有一个SQLite表,我用以下架构存储用户设置:
CREATE TABLE settings (
[id] varchar(50) NOT NULL,
[token] varchar(20) NOT NULL,
[value] varchar(40) NOT NULL,
[created] datetime NOT NULL,
[user_id] INT(10) NOT NULL,
PRIMARY KEY (id)
);
设置名称为[token]
。
该设置的值为[value]
。
我想选择有2个特定设置(两者)的用户:
[token]='language' AND [value]='en'
),[token]='newsletter' AND [value]='1'
),所以我试过了:
SELECT user_id FROM settings
WHERE
(token = 'language' AND value = 'en')
OR (token = 'newsletter' AND value = 1)
)
GROUP BY user_id
但它并不起作用,因为我得到的用户只有2个条件中的一个(我想要两个)。 我该怎么办?
答案 0 :(得分:1)
只需按user_id
汇总您的表格并使用HAVING
即可确保用户满足这两个条件。
select user_id
from settings
group by user_id
having count(case when token = 'language' and value = 'en' then 1 end) > 0
and count(case when token = 'newsletter' AND value = 1 then 1 end) > 0
如果您愿意,可以添加WHERE
子句来加快速度:
where (token = 'language' and value = 'en') or (token = 'newsletter' AND value = 1)
答案 1 :(得分:0)
请尝试此查询:
SELECT user_id
FROM settings
WHERE (token = 'language' AND value = 'en')
OR (token = 'newsletter' AND value = '1')
没有使用Group By子句