作者grence (多想两分钟 = =")
看板Database
标题Re: [SQL ]由Table中捞取资料後Join到另外一个Table
时间Fri Mar 21 23:14:55 2008
※ 引述《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