我从这样的查询开始:
SELECT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
WHERE A.ID IN (SELECT ID FROM TABLE_B)
Run Code Online (Sandbox Code Playgroud)
上面的查询给了我重复的记录,所以我这样添加了DISTINCT关键字:
SELECT DISTINCT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
WHERE A.ID IN (SELECT ID FROM TABLE_B)
Run Code Online (Sandbox Code Playgroud)
第二个查询给了我以下错误:
ORA-00932:数据类型不一致:预期-获得CLOB
- 00000-“数据类型不一致:预期%s得到了%s”
我最终通过将WHERE子句中的条件移动到INNER JOIN这样来更正查询并消除了重复记录:
SELECT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
AND A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么第二个查询不起作用。为什么在DISTINCT此处添加关键字会突然导致问题?
这不是特别有启发性的错误消息,而是由于对LOB的限制,其中包括:
您不能在查询的ORDER BY子句,查询的GROUP BY子句或聚合函数中指定LOB列。
您不能在SELECT ... DISTINCT或SELECT ... UNIQUE语句或联接中指定LOB列。但是,您可以在SELECT ... DISTINCT语句中指定对象类型列的LOB属性,使用UNION的查询,或者在列的对象类型上定义了MAP或ORDER函数的情况下,使用MINUS set运算符。
您正在点击其中的第二个,但是第一个也不时出现。
您可以使用以下方法伪造相同的情况:
SQL> select distinct col from (select to_clob('test') as col from dual);
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CLOB
Run Code Online (Sandbox Code Playgroud)
你将能够使用distinct,如果你上市,而不是仅仅使用非CLOB列,A.*,它包括从CLOB列table_a。
您可以解决此问题,但是更正查询以消除重复项是正确的选择。必须添加distinct到查询中通常表明某些地方出了问题,并且您正在解决问题而不是原因。
| 归档时间: |
|
| 查看次数: |
5717 次 |
| 最近记录: |