【问题标题】:Rewrite query for SQL Server from Oracle从 Oracle 重写 SQL Server 查询
【发布时间】:2017-12-01 13:09:17
【问题描述】:

我有查询,帮我为 SQL Server 重写它:

insert into swi (co, na, ci, ac, id, version, add) 
    select co, na, ci, acc, id, ?, address 
    from swi_tmp 
    where co||me not in (select co||me from swi)

我有,但还是不行

insert into swi (co, na, ci, ac, id, version, add) 
    select co, na, ci, acc, id, ?, address 
    from swi_tmp 
    where not exists (select 1 
                      from swi_tmp
                      where swi_tmp.co = swi.co and swi_tmp.na = swi.na)

【问题讨论】:

  • 请自己试一试,并说明你卡在哪里了。
  • “不工作”是什么意思?

标签: sql-server


【解决方案1】:

NOT EXISTS 子查询中的FROM 子句使用源表而不是目标表。将NOT EXISTS子查询中的表名改为目标表名:

INSERT INTO swi (co, na, ci, ac, id, version, add) 
    SELECT co, na, ci, acc, id, ?, address 
    FROM swi_tmp 
    WHERE NOT EXISTS (SELECT 1 
                      FROM swi
                      WHERE
                          swi_tmp.co = swi.co
                          AND swi_tmp.na = swi.na
                     );

【讨论】:

  • 非常感谢!:) 我只能在星期一查看此查询。我是否可以期望这个查询和之前的查询在 postgress、oracle 和 mssql 上都能正常工作,或者这只是在我的梦想中,我必须为每个 db 编写 2 或 3 个不同的查询?
  • 大多数主要的 DBMS 产品都实现了 ANSI-92 标准 SQL,所以我希望它也可以与 Oracle 和 PostgreSQL 一起使用,但我还没有尝试过。
  • 抱歉,但是这个查询抛出了这个异常“java.sql.SQLException:无法绑定多部分标识符“swi.co”。”为什么?
  • @АлександрПлющев,错误提示列co 在表swi 中不存在。什么 DBMS 返回该错误?
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多