需求:
學生表(學號,年級,學院,專業,班級)
到課率表(id,次數,學時,檢查時間,學號)
早鍛煉表(id,次數,檢查時間,學號)
衛生表(id,次數,檢查時間,宿捨號,原因,學號)
晚歸表(id,次數,檢查時間,宿捨號,學號)
四張表記錄學生的其中違紀信息,現在需要根據時間查出時間區間內所有學生的所有違紀信息。要求高效,快速,求大神指點,最好能給出示例的SQL,謝謝,在線等
SELECT a.*,
b.檢查時間, b.違紀類型, b.次數, b.學時, b.宿捨號, b.原因
FROM 學生表
JOIN (
SELECT 學號, 檢查時間, '到課率' 違紀類型, 次數, 學時, NULL 宿捨號, NULL 原因
FROM 到課率表
WHERE 檢查時間 BETWEEN 區間開始 AND 區間結束
UNION ALL
SELECT 學號, 檢查時間, '早鍛煉' 違紀類型, 次數, NULL 學時, NULL 宿捨號,NULL 原因
FROM 早鍛煉表
WHERE 檢查時間 BETWEEN 區間開始 AND 區間結束
UNION ALL
SELECT 學號, 檢查時間, '衛生' 違紀類型, 次數, NULL 學時, 宿捨號, 原因
FROM 衛生表
WHERE 檢查時間 BETWEEN 區間開始 AND 區間結束
UNION ALL
SELECT 學號, 檢查時間, '晚歸' 違紀類型, 次數, NULL 學時, 宿捨號, NULL 原因
FROM 晚歸表
WHERE 檢查時間 BETWEEN 區間開始 AND 區間結束
) b
ON a.學號 = b.學號
ORDER BY a.學號, b.檢查時間
注:UNION ALL 要求字段類型一致,NULL 學時
要把 NULL
轉化為和 到課率表.學時
一致的類型,類型下面這樣。宿捨號
和 原因
也一樣。
Cast(NULL AS int) 學時