SQL Compact 中的 SQL 减号适用于大型数据集

本文关键字:SQL 大型 数据集 适用于 Compact 中的 | 更新日期: 2023-09-27 18:18:24

>我有两个大表:

products
--------
id (char) (primary key)
somefield1 (char)
somefield2 (char)

expired_products
------
id (char) (primary key)

我只想拥有那些在产品中但未过期的 ID(ID 不在 expired_products 中(。在MS Access中,我会做这样的事情

SELECT products.*
FROM products LEFT JOIN expired_products ON products.id = expired_products.id
WHERE expired_products.id Is Null;

最终,我想将查询结果写入新表中。

SQL Server Compact(sdf 文件(中是否有更好(更快的查询(解决方案?

顺便说一句。我正在使用C#并使用SqlCeConnection来访问数据库。

SQL Compact 中的 SQL 减号适用于大型数据集

标准 SQL

和 SQL Server 中的减号运算符为 EXCEPT

SELECT id 
  FROM products
EXCEPT
SELECT id 
  FROM expired_products;

。但似乎EXCEPT在紧凑型 4.0 中不受支持:(

与SQL一样,这是执行半差分的替代方法:

例如 NOT EXISTS

SELECT *
  FROM products AS p
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM expired_products AS e
                    WHERE p.id = e.id
                  );

例如 NOT IN

SELECT *
  FROM products
 WHERE id NOT IN (SELECT id FROM expired_products);
create table new_table (
    id char(7) -- same as primary key in products
)

这是在 C# 中执行的命令,它是"插入到...选择..."陈述:

insert into new_table (id)
select p.id
from products p
where not exists (select 1 from expired_products e.id = p.id)

在评论后添加

插入 (SQL Server Compact( on MSDN

INSERT [INTO] 
      table_name  [ ( column_list ) ] 
      { VALUES 
      ( { DEFAULT | NULL | expression } [ ,...n] ) 
| derived_table
       }

从 MSDN:


derived_table返回要插入到表中的数据行的任何有效 SELECT 语句。