sql - 在查询中合并两个结果行

标签 sql postgresql relational-division

我有以下查询:

select user_id from user_tags
where user_id = 3086533

哪些输出:

enter image description here

基本上,我希望能够进行此查询,并将其更改为仅在名称“master_sbx”和“phonePicked”都出现时包含 user_id。

因此,与其编写查询:

select user_id from user_tags
where user_id = 3086533

输出为:

enter image description here

我想添加仅包含应用了“master_sbx”和“phonePicked”的 id 的 user_id 的子句,因此输出只会返回

enter image description here

希望这是有道理的。我不确定它在 PostGreSQL 中是否真的可行,但希望得到任何反馈!这是我要编写的更大查询的一部分。

最佳答案

如果我理解正确,你想测试一个 user_id 是否(至少)出现在 name = 'master_sbx' 的一行中以及name = 'phonePicked'

许多方法可以做到这一点。最佳选择取决于您问题中没有的信息。一种方法是使用 EXISTS:

SELECT DISTINCT user_id
FROM   user_tags
WHERE  user_id = 3086533
AND    name = 'master_sbx'
AND    EXISTS (
   SELECT 1 FROM user_tags
   WHERE  user_id = 3086533
   AND    name = 'phonePicked'
   )

另一种自连接方式:

SELECT DISTINCT u1.user_id
FROM   user_tags u1
JOIN   user_tags u2 USING (user_id)
WHERE  u1.user_id = 3086533
AND    u1.name = 'master_sbx'
AND    u2.name = 'phonePicked';
如果 (user_id, name) 是唯一的,则

DISTINCT 是多余的。

这可以视为 relational division 的特例.我们在这个相关的答案中汇集了一整套查询技术:
How to filter SQL results in a has-many-through relation

关于sql - 在查询中合并两个结果行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800978/

相关文章:

sql - Oracle SQL,仅舍入大于 'half'

postgresql - PostgreSQL 错误信息的配置

mysql - SQL 查询 : How to improve?

postgresql - 我怎样才能使除停用词之外的所有内容都被索引

sql - 如何优化此查询?

sql - 一个查询中的 PostgreSQL 条件结合和分离

sql - Postgres 中的记录交集

mysql - 计算彼此不在 10 秒内的行数

mysql - 将限制选择和删除语句中的条件相同的工作

SQL Group by - 按组列出所有行?