程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 記錄-多表連接查詢高效快速

記錄-多表連接查詢高效快速

編輯:編程綜合問答
多表連接查詢高效快速

需求:
學生表(學號,年級,學院,專業,班級)
到課率表(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) 學時
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved