現在有三個表:角色表(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
bya.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
bya.id;
結果如下:
好了,大功告成。
**:
mysql多表 MySQL 多表查詢
多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...
mysql多表查詢方式 MySQL多表查詢方式問題
你的 sql 沒有用到任何索引,對 a b 兩個表都是全表掃瞄,在資料量小的時候是沒有問題的,但是如果資料量超過 100 萬,效能問題就會突顯出來。這裡不清楚你的 created at 欄位是什麼型別,不過從你的 date format created at,y m d 看來,應該是 datetim...
mysql 多表查詢or MySQL 多表查詢
前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...