2014-09-04 84 views
0

這是我的查詢。我刪除了表格名稱以及其他我選擇的內容,以方便閱讀。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 

我需要使用鍵1和鍵2,我選擇另一個查詢,以獲取有關從另一個表鍵(位置,身份證等)的更多信息。我想我需要在這個原始查詢中創建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。

+2

採樣數據W /預期的結果(這組內),將有助於。我還不明白這個問題。同樣用簡單的英語,描述你需要做的事情。你的意思是你需要使用這個作爲一個表/視圖加入?可以通用表表達式的工作(什麼數據庫mySQL,SQL Server,oracle /) – xQbert 2014-09-04 21:14:02

+0

避免循環,一個sql語句做到這一切。 – Twelfth 2014-09-04 21:16:48

回答

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) 
+0

這很接近,但我需要再次檢查另一個表,但每次都使用不同的鍵。我在上面添加了一些代碼來闡明我正在嘗試做的事情。 – user2456259 2014-09-04 21:25:40

+0

你的意思是在「一套」或可能是「或」而不是「和」?上面的例子... – xQbert 2014-09-05 14:03:38