我正在創建一個志愿者技能管理場景,類似于學生/班級/成績矩陣。
因此我有三個表:
table1: skill_categories (28 rows)
fields:
skill_id (int,pk)
skill (varchar)
table2: volunteers (111 rows)
fields:
vol_id (int,pk)
full_name (varchar)
table3: skill_assessments (3108 rows)
fields:
id (int,pk)
skill_id (int)
vol_id (int)
ranking (int)
我想查看 t1 中的每項技能,t2 中排名大于零的每個人的全名,最后是 t3 中的排名和 id。最后一項 skill_assessments.id 將用于更新。
但是所有這 3 個表都有我想從查詢結果中洗掉的其他列。例如,志愿者表有 11 列。
如果我在 t3“where ranking > 0”上執行一個簡單的選擇查詢,我得到 1180 行的查詢結果(在 3108 行中),這在下面的 JOIN 陳述句的結果中得到了確認。
所有這些都是為了解決這個問題:如何在三表連接中選擇特定的列?
我從這個查詢中得到了我需要的確切行,但我想洗掉很多列:
SELECT *
from skill_categories
LEFT JOIN skill_assessments ON skill_assessments.skill_id = skill_categories.skill_id
LEFT JOIN volunteers ON volunteers.vol_id = skill_assessments.vol_id
WHERE skill_assessments.ranking > 0
ORDER BY skill_categories.skill ASC, skill_assessments.ranking DESC
;
uj5u.com熱心網友回復:
從基礎開始。
- 僅選擇您真正需要的列
我想看看t1的每一個技能
您需要從 table1 中選擇每個技能行,需要左連接。
- 來自 t2 的所有排名大于零的人的全名,最后是來自 t3 的排名和 ID
在這里,您需要使用條件將 table2 與 table3 行內where table3.ranking > 0
最終查詢:
select sc.skill,
v.full_name,
sa.id,
sa.ranking
from skill_categories sc
left join skill_assessments sa on sc.skill_id=sa.skill_id
inner join volunteers v on v.vol_id=sa.vol_id
where sa.ranking > 0;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535367.html
標籤:数据库左连接
上一篇:錯誤代碼:1411。我無法將欄位從文本資料型別轉換為日期
下一篇:MySQL:找到一行后中斷查詢
