在mysql的同一张表中找到一行的许多匹配项

时间:2018-07-23 13:54:16

标签: mysql sql mysqli

我的问题很简单,但是我找不到任何解决方案。 请帮助我某人,因为我感觉很糟糕。

我的桌子是这个。

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

我有两个records,分别是admin和其他一些records,它们通过将property_idid匹配而属于这两个记录之一。 最后,我想要的是admin行数据及其count的{​​{1}}。 问题在于数据全部在同一表中。 这就是所需查询的输出。

properties

我希望我能解释得足够清楚。 预先感谢。

2 个答案:

答案 0 :(得分:2)

您似乎想要自联接和聚合:

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;

顺便说一句,没有join的情况下,这是一种比较棘手的方法:

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);

答案 1 :(得分:2)

http://sqlfiddle.com/#!9/5ad1fb/4

SELECT u.*, COUNT(ut.id) property_count
FROM users_table u
LEFT JOIN users_table ut
ON u.id = ut.property_id
WHERE u.admin = 1
GROUP BY u.id, u.name, u.admin