Oracle XE 11.一个非常简单的连接查询给了我以下错误:
ORA-00932: inconsistent datatypes: expected - got CLOB
Run Code Online (Sandbox Code Playgroud)
表:
Product
----------------------------------
id, name, description, categoryId
Catetory
------------------
id, name
Run Code Online (Sandbox Code Playgroud)
产品描述是CLOB.
SQL> desc产品;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(19)
NAME NOT NULL VARCHAR2(30 CHAR)
CATEGORYID NUMBER(19)
DESCRIPTION CLOB
Run Code Online (Sandbox Code Playgroud)
SQL> desc类别;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(19)
NAME NOT NULL VARCHAR2(30 CHAR)
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT DISTINCT t1.ID, t1.DESCRIPTION, t1.NAME, t0.name FROM Product t1
LEFT OUTER JOIN Category t0 ON (t0.ID = t1.categoryId);
Run Code Online (Sandbox Code Playgroud)
第1行的错误:ORA-00932:不一致的数据类型:预期 - 获得CLOB
如果我从选择中删除t0.name,它将起作用.奇怪的.
SELECT DISTINCT t1.ID, t1.DESCRIPTION, t1.NAME FROM Product t1
LEFT OUTER JOIN Category t0 ON (t0.ID = t1.categoryId);
Run Code Online (Sandbox Code Playgroud)
谢谢.
该DISTINCT关键字不能用于CLOB数据类型.解决方法是:
SELECT a.*
, b.clob
FROM (SELECT DISTINCT
... /* columns list wihtout clob columns */
FROM ...
) a
JOIN
table_with_clobs b
ON ...
Run Code Online (Sandbox Code Playgroud)
去你的样本它将是:
SELECT Po.ID, Po.DESCRIPTION, Po.NAME, PC.CatName
FROM
( SELECT DISTINCT t1.ID, t0.name CatName
FROM Product t1
LEFT OUTER JOIN Category t0
ON t0.ID = t1.categoryId
) PC
join Product PO
on PO.ID = PC.ID
Run Code Online (Sandbox Code Playgroud)