【问题标题】:Right Join within a Left Join in SQL Server QuerySQL Server 查询中的左连接中的右连接
【发布时间】:2014-01-01 19:28:12
【问题描述】:

我正在将一些 MS Access 查询转换为 Transact-SQL 格式,但遇到了一些问题。有没有办法在 Join 中编写 Join?
例如:

LEFT JOIN (TaxInfo RIGHT JOIN TaxInfoJackpot 
           ON TaxInfo.RefNumber = TaxInfoJackpot.RefNumber) 
ON HandPay.SlipNumber = TaxInfoJackpot.SlipNumber

当然,这只是一个更大查询的快照。但是,如果有人知道这是否可能,任何帮助都会很棒。

提前致谢。

【问题讨论】:

  • SQL Server 应该可以使用您在此处显示的特定语法。您是否刚刚尝试运行该查询?

标签: sql-server join left-join right-join


【解决方案1】:

您可以使用子查询来做到这一点。

LEFT JOIN (
    SELECT * 
    FROM TaxInfo ti
    RIGHT JOIN TaxInfoJackpot j ON ti.RefNumber = j.RefNumber
) tij ON HandPay.SlipNumber = tij.SlipNumber

但我不确定您是否真的需要这样做。我认为您可以通过普通连接来做到这一点

FROM HandPay h
RIGHT JOIN TaxInfoJackpot j ON h.SlipNumber = j.SlipNumber
LEFT JOIN TaxInfo ti ON j.RefNumber = ti.RefNumber;

【讨论】:

    【解决方案2】:

    如果可能的话,我倾向于让我的所有连接都是连续的并且朝着同一个方向流动(并且我总是尝试重新排序以使其成为可能)。 LEFT JOIN / RIGHT JOIN / ON / ON 对任何人来说都非常令人困惑,包括我自己,而且我已经这样做了很长时间。 Access 当然不会对它抽出(并接受)的奇怪语法有任何好处。

    我不确定当前的语法是否提供了您期望的结果,但您能否与此格式进行比较,看看它们是否相同?如果没有样本数据和期望的结果,很难确定。

    SELECT ...
      FROM dbo.TaxInfoJackPot AS jp
      LEFT OUTER JOIN dbo.HandPay AS hp
        ON hp.SlipNumber = jp.SlipNumber
      LEFT OUTER JOIN dbo.TaxInfo AS ti
        ON jp.RefNumber = ti.RefNumber;
    

    【讨论】:

    • +1 用于编写顺序连接和以相同方式流动的连接。通过这种方式,SQL 更易于理解和“可视化”。
    • 不应该吗?:FROM dbo.HandPay AS hp LEFT OUTER JOIN dbo.TaxInfoJackPot AS jp ...
    • @ypercube 我被捅了一刀;没有整个查询,我不确定。据我们所知,查询以 FROM HandPay RIGHT JOIN somethingElse 开头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多