【问题标题】:LEFT JOIN (SELECT FROM WHERE >Values from another JOIN'ed table<)LEFT JOIN (SELECT FROM WHERE >来自另一个 JOIN'ed 表的值<)
【发布时间】:2015-11-05 10:20:42
【问题描述】:

我正在尝试对一个表进行多个左连接以检索一行信息。

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

这个想法是从'ti'中获取所有信息,并且从'p'表中只获取MC等于ti.MC的一行。 'p' 表包含数百行具有相同 MC 的行,但可以假定所有其他字段具有相同的值(GH、GC、DI、DC)

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

有什么办法可以让我做到这一点?我目前的工作是看看我是否可以使用嵌套连接或可能设置要使用的变量,但目前两者都没有成果。

谢谢

【问题讨论】:

  • 您使用的是哪个 dbms?
  • Microsoft SQL Server

标签: sql sql-server join where


【解决方案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

【讨论】:

  • 这行得通!非常感谢,我对 SQL 还是比较陌生,之前没有见过 APPLY 运算符。是时候阅读它了。再次感谢你! :)
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多