Ambiguous column name error

前端 未结 5 2154
孤街浪徒
孤街浪徒 2020-12-07 01:48

When executing the following (complete) SQL query on Microsoft SQL Server 2000:

SELECT B.ARTIFACTTNS, B.ARTIFACTNAME, B.ARTIFACTTYPE, B.INITIALBYTES, B.TIMES         


        
5条回答
  •  悲&欢浪女
    2020-12-07 02:13

    If that's the exact query you're running, I have no idea why it would find anything ambiguous.

    I wrote what I think is an equivalent query and ran it in my database (Oracle) with no problem.

    EDIT Adding exact output of a new experiment in Oracle. The query executed in this experiment is the exact query given by the OP, with the table name filled in. NO OTHER CHANGES. There's nothing ambiguous in this query. So, either that is not the exact query that is being executed, or SQL Server has a parser bug.

    SQL> create table props (pname varchar2(100),
      2                       pvalue varchar2(100),
      3                       artifacttype number,
      4                       artifacttns number,
      5                       artifactname number);
    
    Table created.
    
    SQL> SELECT      
      2    DISTINCT A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME
      3  FROM
      4   (SELECT DISTINCT 
      5      ARTIFACTTYPE, 
      6      ARTIFACTTNS, 
      7      ARTIFACTNAME 
      8    FROM props 
      9    WHERE PNAME = 'AcmeSystemName' 
     10        AND PVALUE = 'MyRuleGroup' 
     11    UNION 
     12    SELECT DISTINCT 
     13      ARTIFACTTYPE, 
     14      ARTIFACTTNS, 
     15      ARTIFACTNAME 
     16    FROM props
     17    WHERE PNAME = 'AcmeSystemDisplayName' 
     18        AND PVALUE = 'MyRuleGroup') A, 
     19  (SELECT DISTINCT 
     20      ARTIFACTTYPE, 
     21      ARTIFACTTNS, 
     22      ARTIFACTNAME 
     23   FROM props 
     24   WHERE PNAME = 'AcmeSystemTargetNameSpace' 
     25      AND PVALUE = 'http://mymodule') B
     26  WHERE A.ARTIFACTTYPE = B.ARTIFACTTYPE 
     27      AND A.ARTIFACTTNS = B.ARTIFACTTNS 
     28      AND A.ARTIFACTNAME = B.ARTIFACTNAME
     29  /
    
    no rows selected
    

    End Edit

    My suggestion for getting around the error is to give the table in each select clause a unique alias and qualify all column references. Like this:

    SELECT
      DISTINCT A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME
    FROM
     (SELECT DISTINCT 
        P1.ARTIFACTTYPE, 
        P1.ARTIFACTTNS, 
        P1.ARTIFACTNAME 
      FROM {PROPERTIES_TABLE_NAME} P1
      WHERE PNAME = 'AcmeSystemName' 
          AND PVALUE = 'MyRuleGroup' 
      UNION 
      SELECT DISTINCT 
        P2.ARTIFACTTYPE, 
        P2.ARTIFACTTNS, 
        P2.ARTIFACTNAME 
      FROM {PROPERTIES_TABLE_NAME} P2
      WHERE PNAME = 'AcmeSystemDisplayName' 
          AND PVALUE = 'MyRuleGroup') A, 
    (SELECT DISTINCT 
        P3.ARTIFACTTYPE, 
        P3.ARTIFACTTNS, 
        P3.ARTIFACTNAME 
     FROM {PROPERTIES_TABLE_NAME} P3
     WHERE PNAME = 'AcmeSystemTargetNameSpace' 
        AND PVALUE = 'http://mymodule') B
    WHERE A.ARTIFACTTYPE = B.ARTIFACTTYPE 
        AND A.ARTIFACTTNS = B.ARTIFACTTNS 
        AND A.ARTIFACTNAME = B.ARTIFACTNAME
    

提交回复
热议问题