我在SO上看到过类似的错误,但我没有找到解决我的问题的方法。 我有一个SQL查询像:

SELECT DISTINCT
        a.maxa ,
        b.mahuyen ,
        a.tenxa ,
        b.tenhuyen ,
        ISNULL(dkcd.tong, 0) AS tongdkcd
FROM    phuongxa a ,
        quanhuyen b
        LEFT OUTER JOIN ( SELECT    maxa ,
                                    COUNT(*) AS tong
                          FROM      khaosat
                          WHERE     CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
                                                              AND
                                                              'Sep 5 2011'
                          GROUP BY  maxa
                        ) AS dkcd ON dkcd.maxa = a.maxa
WHERE   a.maxa <> '99'
        AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;

当我执行这个查询时,错误结果是: 无法绑定多部分标识符“a.maxa”。为什么? P/s:如果我把查询分成2个单独的查询,它运行正常。

SELECT DISTINCT
        a.maxa ,
        b.mahuyen ,
        a.tenxa ,
        b.tenhuyen
FROM    phuongxa a ,
        quanhuyen b
WHERE   a.maxa <> '99'
        AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;

and

SELECT  maxa ,
        COUNT(*) AS tong
FROM    khaosat
WHERE   CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
                                        AND     'Sep 5 2011'
GROUP BY maxa;

当前回答

你是不是忘了找几张桌子?如果不是,那么你可能需要使用一些别名。

其他回答

我从JDBC得到了同样的错误。检查了一切,我的问题是好的。结果,在where从句中我有一个论证:

where s.some_column = ?

我传入的参数值是null。这也给出了同样的错误,这是误导性的,因为当你搜索互联网时,你会发现查询结构有问题,但在我的情况下不是这样。只是觉得有人可能会面临同样的问题

如果此错误发生在UPDATE中,请再次检查表上导致错误的列/字段的JOIN。

在我的例子中,这是由于缺乏JOIN本身,它由于未知字段而产生了相同的错误(正如Andriy指出的那样)。

我的错误是使用了表中不存在的字段。

表1。Field1 =>不存在

表二。Field1 =>正确

更正表名。

我的错误是因为使用WITH

WITH RCTE AS (
   SELECT...
)
SELECT RCTE.Name, ...
FROM 
  RCTE INNER JOIN Customer
  ON RCTE.CustomerID = Customer.ID 

当用于连接其他表时…

如果你给了盟友的名字,把它改成实际的名字

例如

SELECT  
    A.name,A.date
  FROM [LoginInfo].[dbo].[TableA] as A
   join 
  [LoginInfo].[dbo].[TableA] as B 
  on  [LoginInfo].[dbo].[TableA].name=[LoginInfo].[dbo].[TableB].name;

把它改成

SELECT  
    A.name,A.date
  FROM [LoginInfo].[dbo].[TableA] as A
   join 
  [LoginInfo].[dbo].[TableA] as B 
  on  A.name=B.name;

对我来说,问题是我愚蠢地调用一个DB函数没有空括号select [apo]。[GenerateNationalIdFrance]而不是select [apo].[GenerateNationalIdFrance]()…我花了几分钟才意识到这一点,但对大三学生来说值得一提:-)