2014-01-30 32 views
0

。我正在使用这个查询,但它不会工作。对这里有什么错误有任何想法或建议;如果在同一日期的其他表中找到更新日期字段

'UPDATE SAMPLE C SET SAMPLE.C_DATE = TO_DATE('01/01/2013','MM/DD/YYYY') and TO_DATE('12/31/2013','MM/DD/YYYY') WHERE EXISTS (SELECT * FROM MEMBER_A A, S_NEW B WHERE A.MEM_NBR = B.MEM_NBR AND B.M_ID IN (1111,2222,3333) AND A.L_TEST = TO_DATE('01/01/2013','MM/DD/YYYY') and TO_DATE('12/31/2013','MM/DD/YYYY') AND B.ID = C.ID) 

我无法更新它,并且出现错误。

关于如何使这个更好的任何想法。 谢谢,

+1

1)请格式化您的SQL。 2)这是什么DMBS? –

+0

Oracle数据库 – user3251591

+0

你会得到什么错误? –

回答

0

您有一个基本问题。你想把这个值设置成什么日期?我猜第一个。

还有一些其他语法问题。以下可能是你想要什么:

UPDATE SAMPLE 
    SET C_DATE = TO_DATE('01/01/2013', 'MM/DD/YYYY') 
    WHERE EXISTS (SELECT * 
        FROM MEMBER_A A JOIN 
         S_NEW B 
         ON A.MEM_NBR = B.MEM_NBR AND 
        WHERE B.M_ID IN (1111,2222,3333) AND 
         A.L_TEST BETWEEN TO_DATE('01/01/2013', 'MM/DD/YYYY') and TO_DATE('12/31/2013', 'MM/DD/YYYY') AND 
         B.ID = SAMPLE.ID 
       ); 

编辑:

在Oracle中,你可以做超优雅的两个子查询的解决方案:

UPDATE SAMPLE 
    SET C_DATE = (SELECT max(A.L_TEST) 
        FROM MEMBER_A A JOIN 
         S_NEW B 
         ON A.MEM_NBR = B.MEM_NBR AND 
        WHERE B.M_ID IN (1111,2222,3333) AND 
         A.L_TEST BETWEEN TO_DATE('01/01/2013', 'MM/DD/YYYY') and TO_DATE('12/31/2013', 'MM/DD/YYYY') AND 
         B.ID = SAMPLE.ID 
       ) 
    WHERE EXISTS (SELECT * 
        FROM MEMBER_A A JOIN 
         S_NEW B 
         ON A.MEM_NBR = B.MEM_NBR AND 
        WHERE B.M_ID IN (1111,2222,3333) AND 
         A.L_TEST BETWEEN TO_DATE('01/01/2013', 'MM/DD/YYYY') and TO_DATE('12/31/2013', 'MM/DD/YYYY') AND 
         B.ID = SAMPLE.ID 
       ); 

max()的只是要确定只返回一个值。

+0

A.L_TEST是一个日期字段,但它没有任何数据。我想用A.L_TEST数据(即日期)更新NULL(此时)的C_DATE字段。 – user3251591

+0

如果'A.L_TEST'没有数据,那么只需将'c_date'设置为'NULL'。 –

+0

现在对我有意义。但是如果A.L_TEST明天有数据呢。因为这是健康相关的索赔数据,而且这个A.L_TEST可能会提出一些日期。谁知道。截至目前,我们没有数据。我用'SET C_DATE = A.L_TEST WHERE EXISTS'。但我得到一个错误'SQL错误:ORA-00904:“A”。“L_TEST”:无效标识符'。任何建议请。 – user3251591

0

你正在比较你的c_date和两个日期。这种方式不行。 **之间的代码需要你注意。从你的问题不清楚如何处理它。

UPDATE SAMPLE C 
SET SAMPLE.C_DATE = **TO_DATE('01/01/2013','MM/DD/YYYY') and TO_DATE('12/31/2013','MM/DD/YYYY')** 
WHERE EXISTS 
(SELECT * 
    FROM MEMBER_A A 
    ,  S_NEW B 
    WHERE A.MEM_NBR = B.MEM_NBR 
    AND B.M_ID IN (1111,2222,3333) 
    AND A.L_TEST = **TO_DATE('01/01/2013','MM/DD/YYYY') and TO_DATE('12/31/2013','MM/DD/YYYY')** 
    AND B.ID = C.ID 
) 
+0

得到一些指导后,逻辑中会有一些变化。我们需要在SAMPLE.C_DATE中更新日期,如果它是空的而且A.L_TEST不是NULL。 (SELECT * FROM MEMBER_A A JOIN S_NEW B ON A.MEM_NBR = B.MEM_NBR AND WHERE B.M_ID IN(1111,2222,3333)AND A.L_TEST BETWEEN TO_DATE(' 2013年1月1日','MM/DD/YYYY')和TO_DATE('12/31/2013','MM/DD/YYYY')和B.ID = SAMPLE.ID);这是我改变的代码。但是我在执行SQL错误后遇到错误:错误:ORA-00904:“A”。“L_TEST”:无效的标识符。 任何建议。 – user3251591

相关问题