Oracle数据库中Distinct select的唯一约束

时间:2014-05-23 03:05:04

标签: sql database oracle

我有一个数据处理器可以从选择查询中创建一个表。

<_config:table definition="CREATE TABLE TEMP_TABLE (PRODUCT_ID NUMBER NOT NULL, STORE NUMBER NOT NULL, USD NUMBER(20, 5), 
                            CAD NUMBER(20, 5), Description varchar(5), ITEM_ID VARCHAR(256), PRIMARY KEY (ITEM_ID))" name="TEMP_TABLE"/>

,选择查询

<_config:query sql="SELECT  DISTINCT ce.PRODUCT_ID, ce.STORE, op.USD ,op.CAD, o.Description, ce.ITEM_ID 
                FROM PRICE op, PRODUCT ce, STORE ex, OFFER o, SALE t 
                where op.ITEM_ID = ce.ITEM_ID and ce.STORE = ex.STORE 
                and ce.PRODUCT_ID = o.PRODUCT_ID and o.SALE_ID IN (2345,1234,3456) and t.MEMBER = ce.MEMBER"/>

当我运行该处理器时,我得到一个唯一的约束错误,尽管我在select语句中有一个独特的。

我尝试使用CREATE TABLE AS(SELECT .....)创建它。

是否可能出现该错误?我正在执行批量执行,因此无法找到单个记录。

1 个答案:

答案 0 :(得分:3)

select distinct适用于整行,而不是单独适用于每一列。因此,两行可以具有相同的item_id值,但在其他列中可以不同。

最终修复可能是在查询中使用group by item_id,而不是select distinct。这将需要对逻辑进行其他更改。另一种可能性是在子查询中使用row_number()并选择第一行。