在mysql中查找同一表中一行的多个匹配项

在mysql中查找同一表中一行的多个匹配项,mysql,sql,Mysql,Sql,我的桌子就是这个 users_table: id | name | admin | property_id ----------------------------------- 1 | x | 1 | 0 2 | y | 1 | 0 3 | z | 0 | 1 4 | t | 0 | 2 4 | u | 0 | 2 4 | o | 0 | 2 我有两个记

我的桌子就是这个

users_table:

 id | name | admin   | property_id
-----------------------------------
 1  | x    | 1       | 0
 2  | y    | 1       | 0
 3  | z    | 0       | 1
 4  | t    | 0       | 2
 4  | u    | 0       | 2
 4  | o    | 0       | 2
我有两个
记录
,它们是
管理员
,还有一些其他
记录
,通过将
属性_id
id
匹配,它们属于这两个记录之一。 最后,我想要的是
管理
行数据及其
属性的
计数
。 问题是数据都在同一个表中。 这就是所需查询的输出

  id | name | admin   | property_count
-----------------------------------
  1  | x    | 1       | 1
  2  | y    | 1       | 3

您似乎需要自连接和聚合:

select t1a.id, t1a.name, t1a.admin, count(t1.id) as property_count
from table1 t1a left join
     table1 t1
     on t1a.id = t1.property_id
where t1a.admin = 1
group by t1a.id, t1a.name, t1a.admin;
顺便说一句,有一种更为棘手的方法可以在没有
连接的情况下实现这一点:

select (case when admin = 1 then id else property_id end) as id,
       max(case when admin = 1 then name end) as name,
       max(admin) as admin,
       sum( admin <> 1 ) as property_count
from table1 t1
group by (case when admin = 1 then id else property_id end);
选择(如果admin=1,则为id else属性\u id end)作为id,
最大值(admin=1的情况下,则名称为end)作为名称,
max(管理员)作为管理员,
作为属性计数的总和(管理1)
来自表1 t1
分组依据(如果admin=1,则id else属性_id end);

您似乎想要一个自连接和聚合:

select t1a.id, t1a.name, t1a.admin, count(t1.id) as property_count
from table1 t1a left join
     table1 t1
     on t1a.id = t1.property_id
where t1a.admin = 1
group by t1a.id, t1a.name, t1a.admin;
顺便说一句,有一种更为棘手的方法可以在没有
连接的情况下实现这一点:

select (case when admin = 1 then id else property_id end) as id,
       max(case when admin = 1 then name end) as name,
       max(admin) as admin,
       sum( admin <> 1 ) as property_count
from table1 t1
group by (case when admin = 1 then id else property_id end);
选择(如果admin=1,则为id else属性\u id end)作为id,
最大值(admin=1的情况下,则名称为end)作为名称,
max(管理员)作为管理员,
作为属性计数的总和(管理1)
来自表1 t1
分组依据(如果admin=1,则id else属性_id end);


我还想添加一个
orderby
MySQL 8.0没有按annymore自动排序GROUP,因为MySQL中不推荐按GROUP BY隐式排序。我还想添加一个
orderby
MySQL 8.0没有按annymore自动排序GROUP,因为MySQL中不推荐按GROUP BY隐式排序。我还想添加一个ORDER BY MySQL 8.0不按annymore自动排序分组,因为MySQL中不推荐按分组进行隐式排序。。此外,只有当id列是主键或唯一键时,才能信任此查询,然后MySQL才能正确使用函数依赖关系来解析查询。@RaymondNijland我看不出ORDER BY与此帖子有什么关系。你能提供任何阅读链接吗?或者任何例子来解释你的观点吗?“同样,只有当id列是主键或唯一键时,这个查询才可以被信任,那么MySQL可以正确地使用函数依赖关系来解析查询。”一个链接和topicstarter表明id列不是唯一的。@Alex我相信他的意思是,如果存在重复的
id
值,并且被
property\u id
引用,查询将返回多个结果。“我不知道在这种情况下,这是否真的是你想要的行为。”雷蒙德尼兰德,你是这么看的。我的看法不同。我在OP中没有看到任何订单需求。从我的角度来看,我不喜欢向任何查询添加任何额外订单,因为MySQL端需要额外的工作,这意味着性能较低。因此,我不建议添加任何订单。我也会添加order BY MySQL。8.0不会自动按annymore对GROUP进行排序,因为MySQL中不推荐按GROUP BY进行隐式排序。。此外,只有当id列是主键或唯一键时,才能信任此查询,然后MySQL才能正确使用函数依赖关系来解析查询。@RaymondNijland我看不出ORDER BY与此帖子有什么关系。你能提供任何阅读链接吗?或者任何例子来解释你的观点吗?“同样,只有当id列是主键或唯一键时,这个查询才可以被信任,那么MySQL可以正确地使用函数依赖关系来解析查询。”一个链接和topicstarter表明id列不是唯一的。@Alex我相信他的意思是,如果存在重复的
id
值,并且被
property\u id
引用,查询将返回多个结果。“我不知道在这种情况下,这是否真的是你想要的行为。”雷蒙德尼兰德,你是这么看的。我的看法不同。我在OP中没有看到任何订单需求。从我的角度来看,我不喜欢向任何查询添加任何额外订单,因为MySQL端需要额外的工作,这意味着性能较低。因此,我决不建议添加任何订单,直到订单完成为止。