mysql 多表連線查詢的乙個例子

2021-08-08 17:41:49 字數 1457 閱讀 1422

現在有三個表:角色表(shop_role : id , role_name),許可權表(shop_privilege : id , pri_name),角色許可權表(shop_role_pri : role_id , pri_id),要查詢角色所擁有的許可權名稱。

思路:先查詢角色擁有的許可權 id(在角色許可權表),再通過許可權 id 到許可權表裡直接找其對應的許可權名。

sql 語句:

一開始這樣寫:

select a.*,c.pri_name from shop_role a left join shop_role_privilege b on a.id=b.role_id left join shop_privilege c on b.pri_id=c.id;
結果如下:

雖然查詢出來了,但是 id 相同的重複行太多,進行分組試試:

select a.*,c.pri_name from shop_role a left join shop_role_privilege b on a.id=b.role_id left join shop_privilege c on b.pri_id=c.idgroup bya.id;
結果如下:

確實分組了,但是只有一條記錄,許可權名少了很多,使用group_concat關鍵字連線:

select a.*,group_concat(c.pri_name) from shop_role a left join shop_role_privilege b on a.id=b.role_id left join shop_privilege c on b.pri_id=c.id group by a.id;
結果如下:

結果終於正常了,可以給group_concat(c.pri_name) 加個別名:

select a.*,group_concat(c.pri_name) pri_name from shop_role a left join shop_role_privilege b on a.id=b.role_id left join shop_privilege c on b.pri_id=c.id group by a.id;
結果如下:

好了,大功告成。

mysql 關於子查詢的乙個例子

假設表my tbl包含三個欄位a,b,c 現在需要查詢表中列a的每個不同值下的列b為最小值的記錄量。比如表記錄為 a b c 1 3 cd 2 3 nhd 1 5 bg 2 6 cds 1 7 kiy 3 7 vsd 3 8 ndf 希望得到結果為 a b c 1 3 cd 2 3 nhd 3 7 ...

mysql 關於子查詢的乙個例子

假設表my tbl包含三個欄位a,b,c 現在需要查詢表中列a的每個不同值下的列b為最小值的記錄量。比如表記錄為 a b c 1 3 cd 2 3 nhd 1 5 bg 2 6 cds 1 7 kiy 3 7 vsd 3 8 ndf 希望得到結果為 a b c 1 3 cd 2 3 nhd 3 7 ...

mySQL連線查詢(多表查詢)的分類

連線查詢分類 按照分類 1 內連線 2 外連線 3 交叉連線 說明 sql分92版本和99版本,92版本值包含 1 內連線 而99版本包含上面所有,且99版本的 1 內連線 於92版本有所不同 一 92版本格式 select 查詢列表 from 表1 別名,表2 別名 where 鏈結條件1 and...