代码之家  ›  专栏  ›  技术社区  ›  Saajid Ismail

交叉连接后接左连接

  •  0
  • Saajid Ismail  · 技术社区  · 14 年前

    是否可以在两个表之间执行交叉联接,然后在第三个表上执行左联接,然后执行更多的左联接?我使用的是SQL Server 2000/2005。

    我正在运行下面的查询,这在我看来非常简单,但是我得到了一个错误。

    select  P.PeriodID,
            P.PeriodQuarter,
            P.PeriodYear,
            M.Name,
            M.AuditTypeId,
            A.AuditId
    from Period P, Member M
    
    LEFT JOIN Audits A 
    ON P.PeriodId = A.PeriodId
    
    WHERE 
        P.PeriodID > 29 AND P.PeriodID < 38
        AND M.AuditTypeId in (1,2,3,4)
    order by M.Name
    

    我得到以下错误:

    无法绑定。

    如果我删除左连接,查询就会工作。但是,我需要左连接,因为需要从其他表中提取更多信息。

    我做错什么了?有更好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Cœur Gustavo Armenta    7 年前

    不能组合隐式联接和显式联接- see this running example

    交叉连接在系统中应该很少使用,因此我希望每个交叉连接都是显式的,以确保它显然不是编码错误或设计错误。

    select  P.PeriodID,
            P.PeriodQuarter,
            P.PeriodYear,
            M.Name,
            M.AuditTypeId,
            A.AuditId
    from #Period P, #Member M, #Audits A 
    WHERE 
        P.PeriodID > 29 AND P.PeriodID < 38
        AND M.AuditTypeId in (1,2,3,4)
        AND P.PeriodId *= A.PeriodId
    order by M.Name​
    
        2
  •  5
  •   A-K    14 年前

    select  P.PeriodID,
            P.PeriodQuarter,
            P.PeriodYear,
            M.Name,
            M.AuditTypeId,
            A.AuditId
    from Period P CROSS JOIN Member M
    
    LEFT JOIN Audits A 
    ON P.PeriodId = A.PeriodId
    
    WHERE 
        P.PeriodID > 29 AND P.PeriodID < 38
        AND M.AuditTypeId in (1,2,3,4)
    order by M.Name