SQL查询 - 在另一个查询中使用信息

时间:2014-09-04 21:11:25

标签: sql

这是我的查询。我删除了表名以及我选择的其他内容,以便于阅读。

Select 
   b.Key1, 
   b.Key2
From  
   b 

   left join c 
   on c.MailingKey = b.MailingKey 

   left join d
   on d.OrderLineKey = c.OrderLineKey 

   left join e 
   on e.ShipKey = d.ShipKey 

   left join g 
   on d.ShipKey5 = g.ShipKey5 

   left join a 
   on a.DocKey = b.OrderKey

   left join f 
   on f.pMethKey = b.MethKey

我需要使用我在另一个查询中选择的Key1和Key2来从另一个表中获取有关该键(位置,ID等)的更多信息。我想我将需要在这个原始查询中创建2个循环并将它们全部加入。所以像这样:

Select b.Key1, b.Key2, h.*, i.*
From  b left join 
c on c.MailingKey = b.MailingKey left join 
d on d.OrderLineKey = c.OrderLineKey left join 
e on e.ShipKey = d.ShipKey left join
g on d.ShipKey5 = g.ShipKey5 left join 
a on a.DocKey = b.OrderKey  left join
f on f.pMethKey = b.MethKey left join 
( 
Select* 
From table l 
Where ID = b.Key1
) h left join  ( 
Select* 
From table l 
Where ID = b.Key2
) i

我只是不确定如何写等于b.Key1和b.Key2。

我正在使用Microsoft Sql Server Management。

1 个答案:

答案 0 :(得分:0)

公用表表达式:

with cte as (
Select b.Key1, b.Key2
From  b left join 
c on c.MailingKey = b.MailingKey left join 
d on d.OrderLineKey = c.OrderLineKey left join 
e on e.ShipKey = d.ShipKey left join
g on d.ShipKey5 = g.ShipKey5 left join 
a on a.DocKey = b.OrderKey  left join
f on f.pMethKey = b.MethKey)
Select * from CTE
INNER JOIN othertable o 
 on b.key1=o.key1 
and b.key2=o.key2

或者你的意思是......

内联视图:

Select * 
from otherTable
INNER JOIN (
Select b.Key1, b.Key2
From  b left join 
c on c.MailingKey = b.MailingKey left join 
d on d.OrderLineKey = c.OrderLineKey left join 
e on e.ShipKey = d.ShipKey left join
g on d.ShipKey5 = g.ShipKey5 left join 
a on a.DocKey = b.OrderKey  left join
f on f.pMethKey = b.MethKey) CTE 
 on b.key1=o.key1 
and b.key2=o.key2

或者你的意思是......别的什么?

也许:......使用OR语句......

Select * 
from otherTable o
INNER JOIN (
Select b.Key1, b.Key2
From  b left join 
c on c.MailingKey = b.MailingKey left join 
d on d.OrderLineKey = c.OrderLineKey left join 
e on e.ShipKey = d.ShipKey left join
g on d.ShipKey5 = g.ShipKey5 left join 
a on a.DocKey = b.OrderKey  left join
f on f.pMethKey = b.MethKey) CTE 
 on o.key1=cte.key1 
 OR o.key2=cte.key2

或者......一个声明(在这个集合中)

Select * 
from otherTable o
INNER JOIN (
Select b.Key1, b.Key2
From  b left join 
c on c.MailingKey = b.MailingKey left join 
d on d.OrderLineKey = c.OrderLineKey left join 
e on e.ShipKey = d.ShipKey left join
g on d.ShipKey5 = g.ShipKey5 left join 
a on a.DocKey = b.OrderKey  left join
f on f.pMethKey = b.MethKey) CTE 
 on o.key1 IN (cte.key1, cte.key2)
相关问题