6

我正在使用 Access 2010。

我的错误似乎是混叠的结果。

我读过的解决方案指定在每个级别都应该使用不同的别名(我已经这样做了),并且 Access 喜欢很多 SELECT * (所以我也添加了这些),但它并没有解决我的问题。

我在 ServiceZipSpec.Service_Product 上遇到错误。任何指针?谢谢!

SELECT DISTINCT ServiceZipSpec.Service_Product, ServiceZipSpec.Specificity, Service_Availability.Available, Service_Availability.Zip_Code, Service_Availability.State
    FROM 
    ( SELECT * FROM 
       ( SELECT * FROM Service_Availability AS C_Avail1
         INNER JOIN 
            (
              SELECT C_Avail2.Service_Product, MAX(C_Avail2.Specificity) AS Spec
              FROM Service_Availability AS C_Avail2
              WHERE (C_Avail2.State = "TX" OR C_Avail2.State = "CW")
              GROUP BY C_Avail2.Service_Product 
            ) MaxSpec
         ON C_Avail1.Service_Product = MaxSpec.Service_Product
             AND C_Avail1.Specificity = MaxSpec.Spec
       ) Service_Spec
    LEFT JOIN TABLE_ZipCodes ON Service_Spec.State = TABLE_ZipCodes.State
    ) ServiceZipSpec

    WHERE ServiceZipSpec.Available = TRUE AND (ServiceZipSpec.State = "TX" OR ServiceZipSpec.State = "CW")
    ;
4

3 回答 3

6

The source of your problem is that you are using SELECT * when joining tables that have similarly named columns. Try limiting to SELECT table_name.*, or simply pick out the columns you need.

For example:

SELECT DISTINCT ServiceZipSpec.Service_Product, ServiceZipSpec.Specificity, Service_Availability.Available, Service_Availability.Zip_Code, Service_Availability.State
  FROM 
    ( SELECT Service_Spec.*, TABLE_ZipCodes.Zip_Code FROM 
       ( SELECT C_Avail1.* FROM Service_Availability AS C_Avail1
...
于 2013-01-02T20:48:00.207 回答
2

您需要SELECT colName1, colname2代替SELECT *,您在子查询中遇到冲突。此外,您的外部选择列表将来自具有别名的表ServiceZipSpec

SELECT DISTINCT ServiceZipSpec.Service_Product, 
    ServiceZipSpec.Specificity, 
    ServiceZipSpec.Available, 
    ServiceZipSpec.Zip_Code, 
    ServiceZipSpec.State
FROM 
( 
    SELECT colName1, colname2, etc -- name your columns here
    FROM 
    ( 
        SELECT colName1, colname2, etc -- name your columns here
        FROM Service_Availability AS C_Avail1
        INNER JOIN 
        (
          SELECT C_Avail2.Service_Product, MAX(C_Avail2.Specificity) AS Spec
          FROM Service_Availability AS C_Avail2
          WHERE (C_Avail2.State = "TX" OR C_Avail2.State = "CW")
          GROUP BY C_Avail2.Service_Product 
        ) MaxSpec
        ON C_Avail1.Service_Product = MaxSpec.Service_Product
            AND C_Avail1.Specificity = MaxSpec.Spec
   ) Service_Spec
    LEFT JOIN TABLE_ZipCodes 
        ON Service_Spec.State = TABLE_ZipCodes.State
) ServiceZipSpec
WHERE ServiceZipSpec.Available = TRUE 
    AND (ServiceZipSpec.State = "TX" OR ServiceZipSpec.State = "CW");
于 2013-01-02T20:49:22.643 回答
1

指定的字段引用可以引用 SQL 语句的 FROM 子句中列出的多个表。在以下示例中,OrderID 字段同时存在于 Orders 和 Order Details 表中:

SELECT OrderID 
FROM Orders, [Order Details];

由于该语句未指定 OrderID 属于哪个表,因此会产生此错误。要完成此操作,请通过添加表名来完全限定字段引用。例如:

SELECT Orders.OrderID 
FROM Orders, [Order Details];
于 2018-09-30T22:21:18.240 回答