如何在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
。这里的大多数人想要格式化的文本,而不是图像。