2015-11-05 49 views
0

我试图做一个表上多个左连接,以检索一行信息。左连接(选择从哪里>值从另一个JOIN'ed表<)

FROM THeaders th 

    LEFT JOIN (SELECT * FROM TItems) ti 
        ON th.rtid = ti.rtid 

LEFT JOIN (SELECT TOP 1 MC, GH, GC, DI, DC FROM Prod **WHERE ti.MC = MC**) p 
     ON ti.MC = p.MC AND (ti.AI IS NULL OR EXISTS (SELECT * FROM Prod WHERE MC = ti.MC)) 

的想法是从“钛”得到的所有信息,并从“P”表,其中MC等于ti.MC.只有一行'p'表包含数百行具有相同MC的行,但所有其他字段可假定具有相同的值(GH,GC,DI,DC)

标有星号的部分是I'与...有问题。我认为这是因为,错误“ti.MC无法绑定说”,“ti”的连接尚未初始化,所以不能在选择另一个连接时使用。

有什么办法可以让这种情况发生?我目前的工作是看看我是否可以使用嵌套连接或可能设置一个变量来使用,但目前都没有证明成果丰硕。

感谢

+0

你使用哪个dbms? – jarlh

+0

Microsoft SQL Server –

回答

1

Sql Server它与APPLY操作完成。像这样:

FROM THeaders th 
LEFT JOIN TItems ti ON th.rtid = ti.rtid 
OUTER APPLY (SELECT TOP 1 MC, GH, GC, DI, DC FROM Prod WHERE ti.MC = MC) oa 
+0

This Works!非常感谢你,我对SQL还比较陌生,以前从未见过APPLY运算符。有时间阅读它。再次感谢你! :) –