我试图设计一个查询,以消除重复的2表,这些是CDUCUSTOMER和CDUINVOICE。主键是ID。这个问题还要求确保查询删除重复的数据
设计一个删除查询,它将消除客户列ID
、CustomerLastName
、CustomerFirstName
和发票列Invoice_Date
和Invoice_No
的重复数据。◦确保查询删除所有重复数据。
我试过这个
SELECT ID, CUSTOMERLASTNAME, CUSTOMERFIRSTNAME, INVOICE__DATE, INVOICE_NO
FROM CDUCUSTOMER, CDUINVOICE
(
SELECT ID, CUSTOMERLASTNAME, CUSTOMERFIRSTNAME, INVOICE__DATE, INVOICE_NO
FROM CDUCUSTOMER
UNION
SELECT ID, CUSTOMERLASTNAME, CUSTOMERFIRSTNAME, INVOICE__DATE, INVOICE_NO
FROM CDUINVOICE
) TEMP
WHERE TEMP.ID NOT IN (
SELECT MIN(ID)
FROM (
SELECT ID, CUSTOMERLASTNAME, CUSTOMERFIRTSNAME, INVOICE__DATE, INVOICE_NO
FROM CDUCUSTOMER
UNION
SELECT ID, CUSTOMERLASTNAME, CUSTOMERFIRSTNAME, INVOICE__DATE, INVOICE_NO
FROM CDUinvoice
) TEMP2
GROUP BY ID, CUSTOMERLASTNAME, CUSTOMERFIRTSNAME, INVOICE__DATE, INVOICE_NO
);
我得到一个错误
sql error ora-01789: query block has incorrect number of result columns
2条答案
按热度按时间6psbrbz91#
您的查询似乎使用了一个名为
CDUINVOICE
的函数,但从3开始的每一行都被传递为参数,或者原始查询的第2行应该只是FROM
,例如。vc6uscn92#
如果我理解正确的话,您希望从两个表中删除重复的行。
如果是这样,关于你得到的错误代码(ORA-01789),它说你使用Oracle,那么:不能使用同一查询从两个表中删除行。
我不知道你写这段代码是什么意思。这里应该有一个逗号:
你得到的错误提示有
UNION
(是的,有两个),但是SELECT
语句返回了不同的列数。这是不正确的,至少从你发布的代码来看不是这样-所有选择返回5列,所以-关于真实的的错误(缺少逗号)和Oracle提出的错误,我怀疑你可能没有发布你实际运行的查询。我们使用的一种删除重复项的方法是(一次一个表):
(you我会对另一个表做同样的事情,在
invoice_date
和invoice_no
列上执行连接)。如果这不是你想要的,你能发布一些示例数据来说明问题吗?源数据(显示你现在有什么)和期望的结果(沿着为什么会发生这种情况的解释)。