【问题标题】:The multi part identifier xxx could not be bound (Inner-Join)无法绑定多部分标识符 xxx (Inner-Join)
【发布时间】:2016-03-05 23:55:46
【问题描述】:

我创建了以下查询:

SELECT vw.PackID AS NewData
FROM
(
    SELECT mt.PackID
    FROM EntityTable entities 
    INNER JOIN
    (
        SELECT TOP 1 * FROM MasterTable mt
        WHERE [Id] IN 
        (
            SELECT TOP 1 [chartID] FROM ChartTable
            Where [Code] IN
            (
                SELECT TOP 1 [Account] FROM ItemsTable it
                Where [EntityID] IN
                (
                    Select Distinct EntityID From EntityTable Where EntityID=@EntityID
                )
            )
        )
    ) mtbvw
    ON mt.Id = mtbvw.Id
) vw

我是一名 C# 开发人员,几乎没有接触过 SQL,因此可能有更好的方法来实现这一点(使用内部联接?)但我收到以下错误:

无法绑定多部分标识符“mt.Id”。

无法绑定多部分标识符“mcoa.1”。

谁能帮助我解释为什么我会收到这些错误? 谢谢! :)

关于这是做什么的一些信息:

EntityID 被传递到存储过程中。然后根据传入的 EntityID 从 ItemsTable 中获取帐户。然后将帐户传递给 ChartTable,它会返回第一个 ChartID(该帐户的所有 ChartID 都相同,因此取顶部的无关紧要)并同样传递这个ChartID 回到 MasterTable 并取出主 ID。谢谢:)

【问题讨论】:

  • 当您说 vw.1 时,您要求的是名为“1”的列,该列显然不存在。按照编码,很难弄清楚这是要做什么。您在这里有许多前 1 个查询,但没有排序依据。没有 order by 你不知道会返回哪一行。
  • 这是 mysql 或 sqlserver 还是两者兼而有之?它们不是一回事。
  • @SeanLange 这是 sql server,对不起
  • @SeanLange 该帐户是根据传入的 EntityID 从 ItemsTable 中获取的。然后将帐户传递给 ChartTable,它会返回第一个 ChartID(该帐户的所有 ChartID 都是相同的,因此占据顶部一个无关紧要)同样将其传递回 MasterTable 并取出 ID。谢谢:)
  • 该错误是因为您无法从外部引用子查询内的表。外部查询不能“看到”子查询。

标签: sql sql-server select inner-join


【解决方案1】:

这是基于提供的查询的猜测。

Select Distinct et.EntityID 
From EntityTable et
join ItemsTable it on it.EntityID = et.EntityID
join ChartTable ct on ct.Code = it.Account
join MasterTable mt on mt.Id = ct.charID
Where et.EntityID = @EntityID

【讨论】:

  • 我想你想要Select Distinct mt.PackId这里根据问题。否则,为什么所有这些连接都是必要的?你不能简单地使用:Select Distinct EntityID from EntityTable Where EntityID = @EntityID
  • @SeanLange 我认为这里的问题是我只想加入 MasterTable,而不是 ItemsTable 或 ChartTable?我只需要使用这些来获得正确的 MasterTable,但如果不加入就无法做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2010-11-02
  • 2023-03-21
相关资源
最近更新 更多