代码之家  ›  专栏  ›  技术社区  ›  Malfist

需要查询帮助(使用联接)

  •  0
  • Malfist  · 技术社区  · 16 年前

    我有三张桌子:

    支票簿上有我需要的东西
    Receipts表包含指向所有者表的链接
    所有者表知道它链接到什么支票簿

    只有当收据中有行链接到支票簿时(通过所有者表),我才需要获取支票簿。 我不知道该怎么做,这有点像圆形。这就是我所尝试的:

    SELECT chk.ID, chk.Description FROM tblCheckbook chk
    LEFT JOIN tblOwner o
    ON r.OwnerID = o.ID
    INNER JOIN tblCashReceipts r
    ON chk.ID = o.CheckbookID
    

    但是SQL Server抱怨 多部分标识符“r.ownerID” 无法绑定。“
    我需要做什么才能让这个工作?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Guffa    16 年前

    每个连接都有一个 on 描述关系的子句。你只需要把关系和正确的连接放在一起。

    在这里使用左联接没有意义,因为在第二步中使用的是内部联接。这只会导致数据库使用更大的集合以获得相同的结果。

    select c.ID, c.Description
    from tblCheckBook c
    inner join tlbOwner o on o.CheckbookID = c.ID
    inner join tblCashReceipts r on r.OwnerID = o.ID
    
        2
  •  2
  •   Jarret Hardie    16 年前

    在执行左联接时,还没有遇到R(tblcashReceipts)的定义。你可能会想要:

    SELECT chk.ID, chk.Description FROM tblCheckbook chk
    LEFT JOIN tblOwner o
    ON chk.ID = o.CheckbookID
    INNER JOIN tblCashReceipts r
    ON o.ID = r.OwnerID
    
        3
  •  1
  •   Jeff Grimshaw    16 年前

    我想你就快到了,你只要改变一下你的加入条件。试试这个:

    SELECT chk.ID, chk.Description FROM tblCheckbook chk
    LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
    INNER JOIN tblCashReceipts r ON r.OwnerID = o.ID 
    

    或:

    SELECT chk.ID, chk.Description FROM tblCheckbook chk
    LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
    LEFT JOIN tblCashReceipts r ON r.OwnerID = o.ID 
    WHERE r.OwnerID IS NOT NULL 
    

    那么,如果同一个所有者有多个收据会发生什么呢?使用这个查询,您将为每个Receipt返回一个支票簿,这可能是您想要的,但听起来不像这样。你也可以在上面加上一个不同的符号。

        4
  •  0
  •   Andrew Clark    16 年前

    收据知道它们属于什么支票簿吗?

    通过收据表加入支票簿。

    所有者->收据->支票簿