所罗门王说:没有智慧解决不了的问题。
SELECT * from tb_corporation_and_user 人员所在团队 (`user_id`, `corporation_id` , `role_id` )
SELECT * from tb_corporation 团队描述 (`id` ,`name` ,`logo_url`,`user_id` ,`access_type`,`desc`,)
SELECT * from tb_project 项目描述(`id` ,`name` ,`introduction`,`workspace_mode` ,`project_data` ,`group_id`,)
SELECT * from tb_project_and_user 人员所在项目(`project_id` ,`user_id`,`access_level` )
******************************************************************************************************
SELECT * from tb_corporation 团队描述 (`id` ,`name` ,`logo_url`,`user_id` ,`access_type`,`desc`,)
SELECT * from tb_project 项目描述(`id` ,`name` ,`introduction`,`workspace_mode` ,`project_data` ,`group_id`,)
SELECT * from tb_project_and_user 人员所在项目(`project_id` ,`user_id`,`access_level` )
******************************************************************************************************
--两表左连接+子查询(一个人所在的项目名和团队名)
SELECT p.id, p.`name` project, u.user_id FROM tb_project p LEFT JOIN tb_project_and_user u ON p.id = u.project_id WHERE u.user_id IN ( SELECT id FROM tb_user WHERE account = '[email protected]' ); #注意这里的in和=的用法
******************************************************************************************************
--三表左连接查询(一个人所在的项目名和团队名)
SELECT * FROM ( tb_user u LEFT JOIN tb_project_and_user pu ON u.id = pu.user_id ) LEFT JOIN tb_project p ON p.id = pu.project_id WHERE u.account = '[email protected]'
******************************************************************************************************
-- 查询出一个人所在的团队和所参加的项目
SELECT u.id, u.account, u.`name`,c.`name` team, p.`name` project FROM ( ( ( tb_user u LEFT JOIN tb_project_and_user pu ON u.id = pu.user_id ) LEFT JOIN tb_project p ON pu.project_id = p.id ) LEFT JOIN tb_corporation_and_user cu ON u.id = cu.user_id ) LEFT JOIN tb_corporation c ON c.id = cu.corporation_id WHERE u.account = "[email protected]"******************************************************************************************************
-- 为结果集增加一个序号字段,并倒叙查询出项目超过3个的人,
set @i = 0; # 设置变量并初始化 SELECT (@i := @i + 1) as ord_num, u.id, u.account, u.`name`, c.`name` team, p.`name` project FROM ( ( ( tb_user u LEFT JOIN tb_project_and_user pu ON u.id = pu.user_id ) LEFT JOIN tb_project p ON pu.project_id = p.id ) LEFT JOIN tb_corporation_and_user cu ON u.id = cu.user_id ) LEFT JOIN tb_corporation c ON c.id = cu.corporation_id GROUP BY u.id # 如果要where条件,记得放在group by的前面 HAVING COUNT(project) > 3 # 注意having中聚合函数的含义(AVG() 返回某列的平均值、COUNT() 返回某列的行数、MAX() 返回某列的最大值、MIN() 返回某列的最小值、SUM() 返回某个列之和) ORDER BY ord_num DESC # 倒叙排列******************************************************************************************************
-- 指定人添加到指定项目上(使用了参数)
set @user_id = (SELECT id from tb_user WHERE tb_user.account = "[email protected]"); set @pro_id = (SELECT id from tb_project WHERE tb_project.`name` = "test"); INSERT INTO `hb_rap`.`tb_project_and_user` ( `project_id`, `user_id`, `access_level` ) VALUES (@pro_id, @user_id , '1');******************************************************************************************************
总结:sql语句的编写过程中,需要注意我们依赖那张表作为主要数据,在整个数据集合中使用where进行主要条件筛选,然后having进行第二次筛选(可以使用聚合函数);group by分组和order by排序的关键字的位子也要注意.