繁体   English   中英

在查询中组合两个结果行

[英]Combine two resulting rows in a query

我有以下查询:

select user_id from user_tags
where user_id = 3086533

哪个输出:

在此输入图像描述

从本质上讲,我希望能够接受此查询,并将其更改为仅包含user_id,如果出现名称“master_sbx”和“phonePicked”。

因此,而不是写一个查询:

select user_id from user_tags
where user_id = 3086533

输出:

在此输入图像描述

我想添加仅包含user_id的子句,只有同时应用了“master_sbx”和“phonePicked”的id,所以输出才会返回

在此输入图像描述

希望这是有道理的。 我不确定它在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)是唯一的(user_id, name)DISTINCT是冗余的。

这可以被视为关系分裂的特例。 我们在这个相关答案中汇集了一整套查询技术:
如何以多次通过关系过滤SQL结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM