我有3张桌子
安排:
-hash
PlanEmp:
plan_id emp_id duration
123 1010 30
456 1011 40
789 1012 60
的Emp:
plan_id emp_id
123 2131
456 3131
789 4131
所需摘要输出:
emp_id Name
1010 Andy
1011 Cole
1012 John
2131 Sam
3131 Kim
4131 Ray
查询我是否尝试修改以获得上述结果:
plan_id Name duration
123 Andy 30
123 Sam 30
456 Cole 40
456 Kim 40
789 John 60
789 Ray 60
我无法确定如何使用PlanEmp表和计划表来获取员工详细信息以获取摘要输出。
答案 0 :(得分:3)
这应该有效:
<div class="grid-item car">
<a class="fancybox fancybox-image fancybox-thumbs" rel="gallery1" href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/drizzle.jpg" /><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/drizzle.jpg" alt="" /></a>
</div>
<div class="hidden">
<a class="fancybox fancybox-image fancybox-thumbs" rel="gallery1" href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/one-world-trade.jpg" /><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/one-world-trade.jpg" alt="" /></a>
</div>
答案 1 :(得分:2)
使用以下脚本。
;With cte_1
As( select plan_id,emp_id
From plan
UNION
Select plan_id,emp_id
From plan_emp)
Select c.plan_id,e.Name,p.Duration
From cte_1 c
Join plan p on c.plan_id=p.plan_id
Join emp e on c. Emp_id=e.emp_id
答案 2 :(得分:0)
我确定这是一个合乎逻辑的解释,因为我的声誉尚未达到评论水平,但emp_id
为何Plan and PlanEmp tables
?如果您可以对此进行规范化处理,那么最好将emp_id
从Plan table
移至PlanEmp table
。
答案 3 :(得分:0)
您的表格设计未遵循所需的规范化实践。您应该合并表Plan和EmpPlan。
或
您的设计应该是(要标准化更多):
Table: Plan
Plan_ID
Duration
Table: PlanEmp
Plan_ID
Emp_ID
您可以通过多种方式查询现有结构,但效率可能不高。另一种方式:
Select ISNULL(P.plan_id, PE.plan_id) Plan_ID, E.Name,
(Select Duration from @Plan pp Where pp.plan_id = ISNULL(P.plan_id, PE.plan_id)) as Duration
from Emp E
left Join @lan P on E.emp_id = P.emp_id
left Join PlanEmp PE on E.emp_id = PE.emp_id
Where P.emp_id IS NOT NULL or PE.emp_id is not null