2013-07-18 45 views
0

存在的错误,我想:SQL LIKE /地方使用INSERT语句

与上TBTRIGPMMCANC也TBPROPPAY所有id_payments的列表中创建一个临时表。

从此列表中将它们从TBPROPPAY移动到TBPROPPAYH。

然后从TBPROPPAY中删除它们。

这是我的sql我有一个插入语句问题。我想我需要像以前一样的SQL将行移动到tbproppayh为每个id_payment在临时表中,但我不知道如何编写它

错误是: E_US0AD8插入:目标列的数量必须等于目标 列出指定子查询中的元素。 (星期四7月18日9时31分23秒2013)

----Clean up for IN:035466 

----Description : Create a temporary table with with a list of all id_payments that are on TBTRIGPMMCANC and also TBPROPPAY. 
---------------------------------------------------------------------------------------------------------------------------- 
DECLARE GLOBAL TEMPORARY TABLE session.set_values AS 
SELECT a.id_payment FROM TBTRIGPMMCANC a, TBPROPPAY b 
WHERE a.id_payment = b.id_payment 
ON COMMIT PRESERVE ROWS WITH NORECOVERY;\p\t\g 


--View temporary table 

SELECT * FROM session.set_values;\p\t\g 
-------------------------------------------------------------- 

-- Description: Move list from TBPROPPAY to TBPROPPAYH 
------------------------------------------------------------- 
SELECT id_payment FROM session.set_values 
WHERE EXISTS id_payment;\p\t\g 

-- Insert into tbproppayh 
------------------------------------------------------------- 
Insert into tbproppayh 
Select id_payment FROM TBTRIGPMMCANC a, TBPROPPAY b 
WHERE a.id_payment = b.id_payment;\p\t\g 
------------------------------------------------------------- 

-- Description: DELETE list FROM tbproppay 
------------------------------------------------------------- 
Delete FROM tbproppay b WHERE id_payment IN (Select a.id_payment FROM TBTRIGPMMCANC a, TBPROPPAY b 
WHERE a.id_payment = b.id_payment);\p\t\g 

------------------------------------------------------------- 
--Select from tbproppay & TBTRIGPMMCANC 
------------------------------------------------------------- 
SELECT a.id_payment FROM TBTRIGPMMCANC a, TBPROPPAY b 
WHERE a.id_payment = b.id_payment;\p\t\g  
------------------------------------------------------------- 

回答

0

如果你想要一个临时表可能是最好使用视图来代替。您可以获取所需的所有详细信息,然后从视图中获取。

稍后会发布代码。

你得到的错误是相当自我解释。您正在为目标选择太多列。

0

如果表tbproppayh有不止一个列,您必须对您的INSERT语句中指定的影响列:

Insert into tbproppayh (mycolumn) 
Select id_payment 

另一个建议,把别名表id_payment前场否则解决第一个错误后,你会得到另一个错误在ambiguos领域。

+0

插入到tbproppayh(id_payment)选择a.id_payment从TBTRIGPMMCANC a,TBPROPPAY b WHERE a.id_payment = b.id_payment。仍然无法正常工作在插入错误 – louise

+0

上尝试插入值时在目标表中的现有密钥上添加条件:INSERT INTO ... SELECT .... AND NOT EXISTS(SELECT'X'FROM tbproppayh where condition关键) –