看板 Database 關於我們 聯絡資訊
※ 引述《msplay (Hello Moto)》之銘言: : 小弟想這問題已經兩天了,想出直接用SQL語法組出來, : 不然就得用程式去跑了。 : 假設目前有兩個Table,Table1、Table2 : Table1存的是員工的升遷歷史,如部門、升遷的日期 : PK:ID+DEPID(部門ID)+UPDATE(升遷日期) : Table2存的是員工的加班資料,員工ID、加班的時間 : PK:ID+PLUSDATE : 問題為:找到某員工在某日加班的時候,所在的部門為何? : 看似簡單的問題,但是 table存什麼?假設是員工資料?PK應該有個員工編號…?假設是id 以下想法純粹從語義翻成SQL。 : 第一:升遷的日期與加班的時間並不會相同。 但兩個時間還是有關係的吧,「加班時間」在「任現職等日」跟「升遷日」之間 : 第二:加班的日期會有很多筆、升遷的日期也會有很多筆 肯定是唯一的「員工」吧 所以 SQL至少要有table1.id=table2.id select * from table left join table1 on table.id=table1.id left join table2 on table.id=table2.id and table2.加班日 between table1.現職 and 升遷日 如果沒有任現職等日,用 table1 self join應該串的出來....應該 噗,這篇文章充滿假設,實際跑應該還有很多地方要改。 但感覺在這三張表找關聯這個方向值得思考。 : 目前我的寫法是: : SELECT A.ID, A.PLUSDATE B.DEPID : FROM TABLE1 A : LEFT JOIN : (SELECT ID, PLUSDATE FROM TABLE2 WHERE ID='12345678' : ORDER BY PLUSDATE DESC FETCH FIRST 1 ROWS ONLY)B : ON A.UPDATE<B.PLUSDATE : ------------------------------------------------------------- : 這樣寫只能把最近一筆加班與部門JOIN : 但如果某人在A部門加完2次班後,後來調至B部門加了3次班 : 如何能夠把某員工在某時間內加班的時間與所屬部門「全部」SELECT出來 : SQL語法是否做的到呢? : 謝謝各位高手看完小弟問題!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.209.221