我试图更新与CHECKLIST_INSTANCE_ID关联的问题表(ATTRIBUTE_ID),其中清单尚未在本地工作流工具中完成。我们用新的问题修改了一份纸质清单,修改了一些旧的问题,并且需要将问题重新提交给不完整的清单。sql语句循环选定的值并使用这些循环值执行其他sql调用
对于每个下面的清单实例ID,钙IDS,以及钙加快转速
(Statement A)
SELECT CHECKLIST_INSTANCE_ID, CALC_ID, CALC_REV FROM CHECKLIST_INSTANCE WHERE CHECKLIST_CLASS_ID = '200' and (CHECKLIST_STATE is null OR CHECKLIST_STATE = '0')
滴在回答表的问题(ATTRIBUTE_ID)(只需要清单实例ID作为PK)
(Statement B)
DELETE FROM CHECKLIST_ANSWER WHERE CHECKLIST_INSTANCE_ID='The instance Id from statement A'
并使用相同的实例ID,calc id,calc rev以上重新插入最新的rev问题(ATTIBUTE_ID)。但是,使用该查询的最新问题:
(Statement C)
SELECT CHECKLIST_ATTRIBUTE.ATTRIBUTE_ID FROM CHECKLIST_ATTRIBUTE WHERE IS_ACTIVE='1' AND CHECKLIST_ATTRIBUTE.CHECKLIST_CLASS_ID = '200'
(Statement D)
INSERT INTO CHECKLIST_ANSWER (CHECKLIST_INSTANCE_ID, CALC_ID, CALC_REV, ATTRIBUTE_ID) Values ('CHECKLIST_INSTANCE_ID from statement A', 'CALC_ID from statement A', ' CALC_REV from statement A', 'attribute id from select statement C')
有超过60个问题,我需要换出的约40清单实例,因此我希望不必手工写一个SQLLOADER输入文件,而是使用不知怎的,上面4条语句。
编辑 好,我有一个查询,做了叉乘对新问题的Id
with
incomplete_checklists AS (SELECT CHECKLIST_INSTANCE_ID, CALC_ID, CALC_REV
FROM TPQOT_CHECKLIST_INSTANCE WHERE CHECKLIST_CLASS_ID = '1257877690209' and (CHECKLIST_STATE is null OR CHECKLIST_STATE = '0')
),
newest_questions as (SELECT TPQOT_CHECKLIST_ATTRIBUTE.ATTRIBUTE_ID FROM
NAVARCH.TPQOT_CHECKLIST_ATTRIBUTE WHERE IS_ACTIVE='1' AND
TPQOT_CHECKLIST_ATTRIBUTE.CHECKLIST_CLASS_ID = '1257877690209')
SELECT CHECKLIST_INSTANCE_ID, CALC_ID, CALC_REV, ATTRIBUTE_ID <-will change to INSERT when ready
FROM incomplete_checklists , newest_questions
艰难的部分是我现在需要做的Delete B中将
你怎么知道从查询行结合查询C中的哪些行进入D? – Laurence 2014-09-02 20:41:29
来自语句A的所有记录都应该与来自语句C的所有记录交叉倍数,以形成INSERT语句D. – jeff 2014-09-02 20:51:00