【问题标题】:Loop in INSERT contition在 INSERT 条件下循环
【发布时间】:2020-11-14 09:32:12
【问题描述】:

我是 sql 新手,我不清楚下一步该怎么做: 我有代码:

INSERT INTO table1 (val1, val2)
   SELECT table2.val1, table2.val2
FROM table2
   WHERE NOT EXISTS (
   SELECT count FROM table_log 
   WHERE event_id = table2.id)
   AND table2.type = 'user' -- AND table2.type = 'admin'
   AND table2.size1 > 4 -- AND table2.size2 > 2 (if user admin)

我需要更改此查询以运行条件AND table2.type = 'admin',这意味着table2.val1, table2.val1 会有所不同,条件AND table2.size1 > 4 也应更改为AND table2.size2 > 2

当然我可以用不同的值运行这个查询 2 次,但也许可以在一个查询中完成

【问题讨论】:

标签: sql postgresql


【解决方案1】:

您可以简单地修改WHERE 子句以一次性实现:

INSERT INTO table1 (val1, val2)
   SELECT table2.val1, table2.val2
FROM table2
   WHERE NOT EXISTS (
   SELECT count FROM table_log 
   WHERE event_id = table2.id)
     AND (   (table2.type = 'user' AND table2.size1 > 4)
          OR (table2.type = 'admin' AND table2.size2 > 2)
         )

【讨论】:

    【解决方案2】:

    也许它可能不是很好的方法,但是您可以使用common table expressions (cte)同时运行这两个查询

    WITH cte AS (
     INSERT INTO table1 (val1, val2)
       SELECT table2.val1, table2.val2
     FROM table2
       WHERE NOT EXISTS (
       SELECT count FROM table_log 
       WHERE event_id = table2.id)
       AND table2.type = 'user' -- AND table2.type = 'admin'
       AND table2.size1 > 4
    ) INSERT INTO table1 (val1, val2)
       SELECT table2.val1, table2.val2
    FROM table2
       WHERE NOT EXISTS (
       SELECT count FROM table_log 
       WHERE event_id = table2.id)
       AND table2.type = 'admin'
       AND table2.size1 > 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-20
      • 2011-10-04
      • 1970-01-01
      • 2021-11-06
      • 2017-09-01
      • 1970-01-01
      • 2021-11-25
      • 2023-03-27
      相关资源
      最近更新 更多