如何在SQL中使用同一列两次获取不同的id

如何在SQL中使用同一列两次获取不同的id,sql,Sql,我有以下问题。我有一个user\u id列和一个attribute\u id列,我想获取具有attribute\u id1和4的用户id 在这种情况下,结果将是一个单独的列,其中包含用户id1和35,一旦它们都具有属性id1和4。您可以使用: SELECT user_id FROM table_name WHERE attribute_id IN (1, 4) GROUP BY user_id HAVING COUNT(DISTINCT attribute_id) = 2; with us

我有以下问题。我有一个
user\u id
列和一个
attribute\u id
列,我想获取具有
attribute\u id
1和4的用户id

在这种情况下,结果将是一个单独的列,其中包含
用户id
1和35,一旦它们都具有
属性id
1和4。

您可以使用:

SELECT user_id 
FROM table_name
WHERE attribute_id IN (1, 4)
GROUP BY user_id 
HAVING COUNT(DISTINCT attribute_id) = 2;
with users as
(
select '62' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '1' as userid,  1 as attributeid union
select '35' as userid,  1 as attributeid union
select '35' as userid,  4 as attributeid union
select '1' as userid,  4 as attributeid
)
select u1.userid from users u1
    inner join users u4 on u1.userid = u4.userid
                        and u1.attributeid = 1 
                        and u4.attributeid = 4;

这取决于您的数据,但如果您只有1和4,您可以这样做:

with users as
(
select '62' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '1' as userid,  1 as attributeid union
select '35' as userid,  1 as attributeid union
select '35' as userid,  4 as attributeid union
select '1' as userid,  4 as attributeid
)
select userid from users group by userid having sum(distinct attributeid) = 5;
如果还可以将2和3作为attributeid(因此也可以得到5),则可以使用以下方法:

SELECT user_id 
FROM table_name
WHERE attribute_id IN (1, 4)
GROUP BY user_id 
HAVING COUNT(DISTINCT attribute_id) = 2;
with users as
(
select '62' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '63' as userid,  1 as attributeid union
select '1' as userid,  1 as attributeid union
select '35' as userid,  1 as attributeid union
select '35' as userid,  4 as attributeid union
select '1' as userid,  4 as attributeid
)
select u1.userid from users u1
    inner join users u4 on u1.userid = u4.userid
                        and u1.attributeid = 1 
                        and u4.attributeid = 4;

这是可行的,但我试图理解为什么,但仍然不确定。你能澄清一下这个查询中发生了什么吗?在
的WHERE
中,查询查找所有用户都有属性_id 1和4,以获得结果X。在
组中,按。。。。如果一个
用户id
有重复的
属性id
,它会在X中计算不同的
属性id
。若表有约束,以确保每个
用户id
都不会重复
属性id
,那个么您可以在查询中省略
DISTINCT
。这里的大多数人想要格式化的文本,而不是图像。