我从这样一个查询开始:
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)
上面的查询给我提供了重复的记录,因此我添加了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)
第二个查询给出了以下错误:
ORA-00932:不一致的数据类型:预期- got CLOB
通过将WHERE
子句中的条件移到INNER JOIN
中,我最终更正了查询并消除了重复记录,如下所示:
SELECT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
AND A.ID = B.ID
我只是不明白为什么第二个查询不起作用。为什么在这里添加DISTINCT
关键字会突然引起问题?
发布于 2017-04-26 15:03:35
这不是一个特别的闪电错误消息,但这是因为对LOB的限制,其中包括:
你正在敲击第二个,但第一个也不时出现在这里。
你可以用这样的方法来假装同样的情况:
SQL> select distinct col from (select to_clob('test') as col from dual);
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CLOB
如果只列出非CLOB列,而不是使用distinct
,则可以使用A.*
,后者包括来自table_a
的CLOB列。
你可以解决这个问题,但更正查询以消除重复项是正确的。必须将distinct
添加到查询中通常是某种错误的迹象,而且您正在修复症状,而不是原因。
https://stackoverflow.com/questions/43637438
复制相似问题