在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端需要额外的工作,这意味着性能较低。因此,我决不建议添加任何订单,直到订单完成为止。