我有两张表,我希望在不使用连接的情况下获取日期。
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.
任何输入?
答案 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
您的所有列别名都是t1
或t2
,因此您将获得多个具有相同名称的列。我不认为这是你想要的,因为两个表都有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
但它不会关联两个表中的值。