【问题标题】:Inner Join to Same Table Twice on same column在同一列上两次内连接到同一张表
【发布时间】:2015-12-02 15:57:28
【问题描述】:

SQL Server 查询尝试将一个视图与另一个视图连接两次时遇到问题

SELECT 
    FAC.* 
FROM 
    ViewFacturacionDiaria_Test AS FAC
INNER JOIN
    ViewInformacionRepresentantes AS REP
        ON REP.RepIDTabacal = FAC.Vendedor
INNER JOIN
    ViewInformacionRepresentantes AS REP2
        ON REP2.RepIDCtayOrden = FAC.Vendedor
WHERE
    FecCpbte BETWEEN '2015-11-28' AND '2015-11-30'

在“FAC”视图中,我有销售信息,在另一个视图中,我有一组特定的销售人员,我想从主视图中过滤出来。

我想了解查询返回空结果集的原因。

【问题讨论】:

  • 由于INNER JOIN 的键未出现在所有记录中,记录中可能存在不匹配。如果您更改为LEFT OUTER JOIN,至少暂时获取没有匹配项的表记录,这会显示什么吗?
  • 如果我更改为 LEFT OUTER JOIN 它可以工作,但它会从主视图中带来所有记录,包括我需要的记录。如果我禁用其中一个内部联接,无论是哪一个,查询都可以正常工作;我不知道为什么不能同时工作。

标签: sql-server join inner-join


【解决方案1】:

抱歉,我无法发表评论。但我相信彼得的评论是正确的。由于您使用的是 2 个内部连接,因此它们都需要返回结果。您是否希望两个联接都能找到匹配项?

试试这个,看看哪一列是空的。这就是导致没有返回行的连接。

SELECT 
    FAC.Vendedor
    ,REP.RepIDTabacal
    ,REP2.RepIDCtayOrden
FROM 
    ViewFacturacionDiaria_Test AS FAC
LEFT JOIN
    ViewInformacionRepresentantes AS REP ON
    REP.RepIDTabacal = FAC.Vendedor
LEFT JOIN
    ViewInformacionRepresentantes AS REP2 ON
    REP2.RepIDCtayOrden = FAC.Vendedor
WHERE
    FecCpbte BETWEEN '2015-11-28' AND '2015-11-30'

【讨论】:

  • 谢谢你们。我使用了上面的查询并在 where 子句中添加了一些过滤器,所以我得到了我想要的东西。我对内部联接有误解,因此您的查询为我清除了它。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2011-11-12
  • 2013-01-07
  • 1970-01-01
  • 2023-02-23
  • 2019-07-26
  • 2016-06-05
相关资源
最近更新 更多