【MySQL】多表聯合查詢(新增查詢欄位、引數設定)
阿新 • • 發佈:2018-12-22
所羅門王說:沒有智慧解決不了的問題。
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排序的關鍵字的位子也要注意.