6

Access2010を使用しています。

私のエラーはエイリアシングの結果のようです。

私が読んだ解決策は、すべてのレベルで異なるエイリアスを使用する必要があること(私が行ったこと)と、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

問題の原因は、SELECT *同じ名前の列を持つテーブルを結合するときに使用していることです。に制限するSELECT table_name.*か、必要な列を選択してみてください。

例えば:

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テーブルとOrderDetailsテーブルの両方に存在します。

SELECT OrderID 
FROM Orders, [Order Details];

このステートメントは、OrderIDが属するテーブルを指定していないため、このエラーが発生します。この操作を完了するには、テーブル名を追加してフィールド参照を完全に修飾します。例えば:

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