2015-06-22 71 views
0

我是SQL新手,遇到了一些解决问题的麻烦。我正在重写一个脚本,以便能够与收到电子邮件的客户进行匹配。以前我一直在使用会话表如下:将表格从插入表格中插入

DECLARE GLOBAL TEMPORARY TABLE EMAIL_SENDS 
     (
     ACCOUNT_NUMBER  INT 
     ) 
WITH REPLACE 
ON COMMIT PRESERVE ROWS 
; 

INSERT INTO SESSION.EMAIL_SENDS 
SELECT  ACCOUNT_NUMBER 
FROM  SENT_DATA A 
    JOIN MAIN_TABLE B 
     ON A.CLIENT_ID_SUBKEY = B.CUST_ID 
     OR A.CLIENT_ID_SUBKEY = B.OLD_ID 
WHERE  SEND_ID = 123456 
GROUP BY ACCOUNT_NUMBER 
; 

然后把数据当我刚使用CASE WHEN C.ACCOUNT_NUMBER IS NOT NULL THEN 1 ELSE 0 END加入与EMAIL_SENDS检举谁拥有和MAIN_TABLE尚未收到电子邮件。

但是,我想改进这个过程,并向MAIN_TABLE添加一列,说明谁收到了电子邮件,谁没有收到。

这是我的脚本至今:

ALTER TABLE MAIN_TABLE 
ADD EMAILED INT 
; 

INSERT INTO MAIN_TABLE 
SELECT  EMAILED 
CASE WHEN ACCOUNT_NUMBER IS NOT NULL THEN 1 ELSE 0 END 
    FROM (SENT_DATA A 
      JOIN MAIN_TABLE B 
      ON A.CLIENT_ID_SUBKEY = B.CUST_ID 
      OR A.CLIENT_ID_SUBKEY = B.OLD_ID 
      WHERE  SEND_ID = 123456 
      GROUP BY ACCOUNT_NUMBER 
      ) 
; 

由于我是新来的SQL我无法弄清楚我要去哪里错了(尽管它可能是显而易见的任何人精通它)。

+0

分享你的表结构....有两列的主表? EMIALED,ACCOUNT_NUMBER –

+0

您确定要'INSERT INTO MAIN_TABLE',而不是'UPDATE MAIN_TABLE'吗? – mustaccio

回答

0

试试这个。与此(电邮发送,ACCOUNT_NUMBER)取代来自主表列名

INSERT INTO MAIN_TABLE (EMAILED,ACCOUNT_NUMBER) 
SELECT  EMAILED, 
CASE WHEN ACCOUNT_NUMBER IS NOT NULL THEN 1 ELSE 0 END 
    FROM (SENT_DATA A 
      JOIN MAIN_TABLE B 
      ON A.CLIENT_ID_SUBKEY = B.CUST_ID 
      OR A.CLIENT_ID_SUBKEY = B.OLD_ID 
      WHERE  SEND_ID = 123456 
      GROUP BY ACCOUNT_NUMBER 
      ) 
;