[英]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.