【问题标题】:sql server - checking existence for each row in insertsql server - 检查插入中每一行的存在
【发布时间】:2019-12-18 11:38:16
【问题描述】:

如果字段“partita_iva”已在此表中,我需要插入并检查每一行,如果是,则字段“flag”必须为 1,否则必须为 0。我这样做了,但是为所有行设置 1,即使应该为 1 只为一行

INSERT INTO tab2(id, flag)
select newid, 
CASE 
    WHEN EXISTS(SELECT * FROM tab1 WHERE partita_iva IN(SELECT partita_iva FROM tab2))
    THEN 1
    ELSE 0
END AS flag
from tab1

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。你的代码很不清楚。
  • 您要检查什么,是否存在名为 partita_iva 的列或 partita_iva 上的某些值是否存在?请清楚地提出问题。
  • @SagarTimalsina 我想检查 partita_iva 上的值是否存在,如果已经存在一个值,我必须将该值的标志设置为 1,使用我提供的代码,所有行都有 1即使它应该是 1 只是一行

标签: sql sql-server exists


【解决方案1】:

大概可以简化一下。

INSERT INTO tab2 (id, flag)
SELECT t1.newid
, IIF(EXISTS(SELECT 1 FROM tab2 t2 WHERE t2.partita_iva = t1.partita_iva), 1, 0) AS flag
FROM tab1 t1

【讨论】:

    【解决方案2】:

    您当前的查询逻辑对我来说似乎是正确的,但您可以关联您的子查询:

    INSERT INTO tab2(id, flag)
          SELECT NEWID(), CASE WHEN EXISTS(SELECT 1 
                                           FROM tab2 t2 
                                           WHERE t2.partita_iva = t1.partita_iva 
                                          )
                               THEN 1 ELSE 0
                          END AS flag
          FROM tab1 t1;
    

    NEWID() 是一个创建唯一标识符类型的唯一值的函数。

    【讨论】:

      【解决方案3】:

      作为一个在黑暗中的总刺:

      INSERT INTO tab2(Id,Flag)
      SELECT newid, --Do you mean NEWID()?
             CASE WHEN EXISTS(SELECT 1 FROM tab2 T2 WHERE T2.partita_iva = T1.partita_iva) THEN 1 ELSE 0 END
      FROM tab1 T1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-18
        • 2022-06-15
        • 1970-01-01
        相关资源
        最近更新 更多