我用mysql关联查询三张表,分别是manager、school、user表,manager表和school表关联的字段为m.schoolId和s.pkid,manager和user表的关联字段为m.userId和u.userId,现在要实现的查询结果是查询所有的学校信息以及学校里面学校管理员的相关信息,因为一个学校里面可能存在好几个管理员我希望实现的结果是:这样的,请问大神们该如何写sql!
另附表结构:school表:
manager表:
user表:
根据学校Id去做分组查询吧 最后得到的结果是需要自己去做处理的 不可能得到你那张表的情况,只能显示如下:
学校名称 姓名 电话
学校1 管理员1 123
学校1 管理员2 132
学校2 管理员1 111
学校2 管理员2 222
之后的你想显示成这样要在页面去做数据处理
select m.SchoolId as schoolId,s.SchoolName as schoolName,u.Tel as tel,m.UserName from school s,manager m,user u
where m.schoolId = s.pkid and m.userId = u.userId group by schoolId order by schoolId
显示结果:
学校编号 学校名称 管理员1的电话号码 管理员1 的姓名
学校标号 学校名称 管理员2 的电话号码 管理员2 的姓名
。。。。。。
http://blog.csdn.net/rainyspring4540/article/details/50231435
select m.SchoolId as schoolId,s.SchoolName as schoolName,m.UserName as userName,u.Tel as tel from school s left join manager m on
m.schoolId = s.pkid right join user u on m.userId = u.userId
楼上的差不多是对的,但我觉得应该在此基础上这样加一点 试一试 select m.SchoolId as schoolId,s.SchoolName as schoolName,m.UserName as userName,u.Tel as tel from school s right join manager m on
m.schoolId = s.pkid right join user u on m.userId = u.userId order by s.Id
SELECT
s.PKID
schoolId,
s.SchoolName
schoolName,
s.SchoolType
schoolType,
s.CreateTime
createTime,
a.userAccount userAccount,
a.userName userName,
a.mTel mTel
FROM
school s
LEFT JOIN
(SELECT
m.UserAccount
userAccount,
m.SchoolId
schoolId,
m.UserName
userName,
ua.Tel
mTel
FROM
manager m
LEFT JOIN user ua
ON m.UserId
= ua.UserId
WHERE m.ManagerType
= '4') a
ON s.PKID
= a.schoolId
AND s.ProvinceCode
= '45000000'
AND s.CityCode
= '45080000'
ORDER BY mTel DESC;
这是我现在写的sql,结果肯定是能查出来的,但是我觉得你们都没明白我的意思,我的意思是如果一个学校存在好几个管理员的话,学校信息我不要重复的,我只希望显示一个学校信息、有几个管理员就显示几个管理员信息;
SELECT
s.PKID schoolId,
s.SchoolName schoolName,
s.SchoolType schoolType,
s.CreateTime createTime,
[Order] = stuff(
(
SELECT
',' + [a.UserName] + ' ' + [a.userAccount] + ' ' + [a.mTel]
FROM
(
SELECT
m.UserAccount,
m.SchoolId,
m.UserName,
ua.Tel
FROM
manager m
LEFT JOIN USER ua ON m.UserId = ua.UserId
WHERE
m.ManagerType = '4'
) a
)
WHERE
a.SchoolId = s.SchoolId FOR xml path ('')
),
1,
1,
''
)
FROM
school s
GROUP BY
schoolName
你试下这个行不行 你的连表我不太确定 感觉是没问题的
SELECT
s.PKID schoolId,
s.SchoolName schoolName,
s.SchoolType schoolType,
s.CreateTime createTime,
a.m
FROM
school s
LEFT JOIN
(SELECT
GROUP_CONCAT(COUNT(m.UserAccount,m.UserName,ua.Tel)) m,
m.SchoolId schoolId
FROM
manager m
LEFT JOIN user ua
ON m.UserId = ua.UserId
WHERE m.ManagerType = '4' GROUP BY m.SchoolId) a
ON s.PKID = a.schoolId
AND s.ProvinceCode = '45000000'
AND s.CityCode = '45080000'
ORDER BY mTel DESC;
你想要的表结果难道是:
学校 管理员
1校 1员
(empty) 2员
2校 3员
吗?
这种表结构不是只有程序里用吗,从数据库拿出的表好像不能这样随意构造吧!