現在有三個表:角色表(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...