1. 程式人生 > >【MySQL】多表聯合查詢(新增查詢欄位、引數設定)

【MySQL】多表聯合查詢(新增查詢欄位、引數設定)

所羅門王說:沒有智慧解決不了的問題。

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
	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排序的關鍵字的位子也要注意.