错误:列引用不明确

时间:2018-01-23 14:18:42

标签: oracle postgresql

我有两张表,我希望在不使用连接的情况下获取日期。

id ProductVersion   productName  productDate
1    p1.1            product1     2017-3-11
2    p1.2            product1     2017-3-11
3    p2.1            product2     2017-5-12
4    p2.2            product2     2017-5-12
5    p2.3            product2     2017-5-12
6    p3.1            product3     2017-11-21
7    p3.1            product3     2017-11-21

表2

tid  productVersion  comments status       AvailableDate
101    p1.1            Good     Sold          2017-3-11  
102    p1.1            Good     Available     2017-3-12
1009   p1.1            Good     Available     2017-3-12
4008   p3.1            Average  NA            2017-11-11
106    p3.2            Good     Sold          2017-5-14
6      p3.1            Average  Available     2017-11-12

我有两张表,如上所示。

我想从以上两个表中获取productVersion,productName,productDate,Comments,status列详细信息。

SQL查询(没有连接):

select productversion t1,productName t1,productDate t1,comments t2,status t2 from table1 t1,table2 t2 
where t1.productVersion = t2.productversion

错误讯息:

Error: column reference "productDate" is ambiguous.

任何输入?

2 个答案:

答案 0 :(得分:0)

要引用特定的表列,请使用以下语法:

table_name.column_name

您的查询应该是:

select t1.productversion, t1.productName, t1.productDate,
       t2.comments, t2.status
from table1 as t1
join table2 as t2 on t1.productVersion = t2.productversion

答案 1 :(得分:0)

[TL; DR]您的主要问题是,您似乎将表别名放在列名称之后,其中列的别名应该是列名前缀,以标识列所属的表。

您的查询相当于:

select productversion AS columnalias1,
       productName    AS columnalias2,
       productDate    AS columnalias3,
       comments       AS columnalias4,
       status         AS columnalias5
from   table1 t1,
       table2 t2 
where  t1.productVersion = t2.productversion

您的所有列别名都是t1t2,因此您将获得多个具有相同名称的列。我不认为这是你想要的,因为两个表都有productVersion列,因此查询解析器不知道你打算使用哪个。您可能希望列名前面的表别名标识每列所属的表:

select t1.productversion,
       t1.productName,
       t1.productDate,
       t2.comments,
       t2.status
from   table1 t1,
       table2 t2 
where  t1.productVersion = t2.productversion

第二个问题是,虽然您说这是一个“没有连接”的查询,但您使用的是旧的Oracle逗号连接语法,并且可以使用ANSI / ISO SQL语法重写您的查询以使其具有完全相同的功能。相当于:

select t1.productversion,
       t1.productName,
       t1.productDate,
       t2.comments,
       t2.status
from   table1 t1
       INNER JOIN table2 t2 
       ON ( t1.productVersion = t2.productversion )

如果您想要没有连接的内容,请使用UNION ALL

SELECT productVersion,
       productName,
       productDate,
       NULL AS Comments,
       NULL AS status
FROM   table1
UNION ALL
SELECT productVersion,
       NULL AS productName,
       NULL AS productDate,
       Comments,
       status
FROM   table2

但它不会关联两个表中的值。