Mysql MariaDB:带有连接的复杂查询
我试图让所有的用户有一个以上的衣服,但没有得到正确的结果Mysql MariaDB:带有连接的复杂查询,mysql,mariadb,Mysql,Mariadb,我试图让所有的用户有一个以上的衣服,但没有得到正确的结果 select us.id from users as us inner join user_clothes as uc1 ON (uc1.userId = us.id) inner join clothes as cl on (cl.id = uc1.clothesId) inner join u
select us.id from users as us
inner join user_clothes as uc1 ON (uc1.userId = us.id)
inner join clothes as cl on (cl.id = uc1.clothesId)
inner join user_clothes as uc2 on (cl.id = uc2.clothesId)
HAVING COUNT(uc2.clothesId) > 0
有什么想法吗?您似乎对用户衣服做了不必要的加入,并且缺少了一个
GROUP BY
子句,因此:
select us.id from users as us
inner join user_clothes as uc1 ON (uc1.userId = us.id)
inner join clothes as cl on (cl.id = uc1.clothesId)
GROUP BY us.id
HAVING COUNT(distinct uc1.clothesId) > 0
似乎您对用户进行了不必要的连接,并且缺少了一个
GROUP BY
子句,因此:
select us.id from users as us
inner join user_clothes as uc1 ON (uc1.userId = us.id)
inner join clothes as cl on (cl.id = uc1.clothesId)
GROUP BY us.id
HAVING COUNT(distinct uc1.clothesId) > 0
由于您已加入用户表两次,因此该表中的每条记录将被计数两次。虽然您可以这样做:
select us.id from users as us
inner join user_clothes as uc1
ON (uc1.userId = us.id)
inner join user_clothes as uc2
ON (uc2.userId = us.id
AND uc2.clothesId<>uc1.clothesId)
由于您已加入用户表两次,因此该表中的每条记录将被计数两次。虽然您可以这样做:
select us.id from users as us
inner join user_clothes as uc1
ON (uc1.userId = us.id)
inner join user_clothes as uc2
ON (uc2.userId = us.id
AND uc2.clothesId<>uc1.clothesId)
您可以大大简化查询。实际上,您不需要任何
加入
s,只需要分组方式
select uc.userId
from user_clothes uc
group by uc.userId
having min(uc.clothesId) <> max(uc.clothesId);
选择uc.userId
来自用户(u)
按uc.userId分组
具有最小(uc.CloseSid)和最大(uc.CloseSid);
此查询所需的所有信息都在user\u
表中
注意:您也可以使用
having count(distinct uc.clothesId)>1
<代码>计数(不同)通常是一个更昂贵的操作。比较最小值和最大值做了同样的事情。您可以大大简化查询。实际上,您不需要任何加入
s,只需要分组方式
select uc.userId
from user_clothes uc
group by uc.userId
having min(uc.clothesId) <> max(uc.clothesId);
选择uc.userId
来自用户(u)
按uc.userId分组
具有最小(uc.CloseSid)和最大(uc.CloseSid);
此查询所需的所有信息都在user\u
表中
注意:您也可以使用
having count(distinct uc.clothesId)>1
<代码>计数(不同)通常是一个更昂贵的操作。比较最小值和最大值的作用是相同的。首先添加GROUP by us.id
谢谢,@AgRizzo。这确实是一个良好的开端<代码>美国分组。id不起作用,但uc2分组。CloseSid
起作用。:)我怀疑你没有从按CloseSid
分组中得到正确的结果,这似乎很奇怪。从添加我们的分组开始。id
谢谢,@AgRizzo。这确实是一个良好的开端<代码>美国分组。id不起作用,但uc2分组。CloseSid
起作用。:)我怀疑您没有通过CloseSid
进行分组得到正确的结果,这似乎很奇怪。我认为应该是uc.userID
我认为应该是uc.userID