2014-11-24 72 views
0
INSERT INTO packageamounts 
    SELECT 
     '6abc148c-20b7-cd34-c433-5472b1b9627d', packageamounts.name, '', '', 1, 1, 
     NULL, 0, NULL, packageamounts.package_id, '', packageamounts.amount, 
     packageamounts.taxtype_id, packageamounts.unit_value, 'd754c9c9-a0cb-ad43-b237-546c7f6eb903' 
    FROM 
     packageamounts 
    WHERE 
     packageamounts.id IN (SELECT id 
          FROM (SELECT * 
            FROM packageamounts 
            WHERE packageamounts.insprovider_id = 'b7f4525a-0ddd-292a-a574-4d1c742e7ff8' 
            ORDER BY effective_date DESC) AS v 
          WHERE v.effective_date <= TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 
           AND v.deleted = 0 
          ORDER BY v.effective_date DESC, v.date_entered DESC) v 
    WHERE v.deleted = 0 ORDER BY v.effective_date DESC, v.date_entered DESC); 
+1

INSERT的结构是:'INSERT INTO [TABLE]([列名称列表])VALUES([值列表])'。上面描述的INSERT看起来不像那样。 – alfasin 2014-11-24 05:33:38

+0

问题出在Where条件。插入运行正常,如果我们删除Where条件。我试过所有的子查询都没有任何错误地运行 – 2014-11-24 05:37:30

+1

你可以用INSERT INTO [TABLE] [值列表]插入,但不建议这样做,因为你必须提供* all *表中的字段,正确的顺序,如果表结构发生变化 - 它会破坏你的代码。如果你可以运行'SELECT'部分并检索所需的结果,那么你应该很好 - 只需从下面的@Multisync中删除你的查询的排序 – alfasin 2014-11-24 05:41:41

回答

2

试试这个:

INSERT INTO packageamounts 
    SELECT 
     '6abc148c-20b7-cd34-c433-5472b1b9627d', name, '', '', 1, 1, 
     NULL, 0, NULL, package_id, '', amount, 
     taxtype_id, unit_value, 'd754c9c9-a0cb-ad43-b237-546c7f6eb903' 
    FROM 
     packageamounts 
    WHERE 
     packageamounts.id IN (SELECT id 
          FROM (SELECT * 
            FROM packageamounts 
            WHERE packageamounts.insprovider_id = 'b7f4525a-0ddd-292a-a574-4d1c742e7ff8' 
           ) AS v 
          WHERE v.effective_date <= TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 
           AND v.deleted = 0) 
    and deleted = 0 
    ORDER BY effective_date DESC, date_entered DESC; 

(去掉了一些额外的ORDER BY +有在最后一个额外的支架)

另一个查询其不相同:

INSERT INTO packageamounts 
    SELECT 
     '6abc148c-20b7-cd34-c433-5472b1b9627d', name, '', '', 1, 1, 
     NULL, 0, NULL, package_id, '', amount, 
     taxtype_id, unit_value, 'd754c9c9-a0cb-ad43-b237-546c7f6eb903' 
    FROM 
     packageamounts 
    WHERE insprovider_id = 'b7f4525a-0ddd-292a-a574-4d1c742e7ff8' 
    and effective_date <= TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 
    and deleted = 0 
    ORDER BY effective_date DESC, date_entered DESC; 
+0

它不工作。布拉克斯是正确的,每个开始括号都有一个右括号。此外,我无法从查询中删除订单,其所需的 – 2014-11-24 05:53:28

+0

@Anjali Sachdev查询中的最后一个括号不正确 - 尝试查找相关的左侧。 ORDER BY在你的查询中不起任何作用 – Multisync 2014-11-24 05:57:56

+0

@Anjali Sachdev此外,你甚至不需要IN +子查询 – Multisync 2014-11-24 05:59:08