查询具有耦合条件的行

时间:2017-06-06 09:25:01

标签: sql sqlite

我有一个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个条件中的一个(我想要两个)。 我该怎么办?

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子句