2011-12-21 3 views
1

私は2つの大きなテーブルを持っていますin expired_products)。 MS Accessで、私は最終的にこのSQLマイナス

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

ような何かをするだろう、私は新しいテーブルにクエリの結果を書きたいです。

SQL Server Compact(sdfファイル)には、優れた(高速なクエリ)ソリューションがありますか?

Btw。私はC#を使用しており、SqlCeConnectionを使用してデータベースにアクセスしています。

答えて

2
create table new_table (
    id char(7) -- same as primary key in products 
) 

これは、C#で実行するコマンドである、それは "insert into ... select ..." の文です:MSDNから

INSERT (SQL Server Compact) on MSDN

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

コメントの後に追加

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


derived_table

テーブルに挿入するデータの行を返す任意の有効なSELECT文の

+0

しかし、SQL Server Compactの – ErikEJ

+0

@ErikEJでサポートされていない挿入は、私は私の答えに追加した情報に基づいてきました。 –

+0

あなたのご意見をお寄せいただきありがとうございます – ErikEJ

4

標準SQLおよびSQL ServerでのマイナスオペレータがEXCEPTです:

SELECT id 
    FROM products 
EXCEPT 
SELECT id 
    FROM expired_products; 

...しかし、それはEXCEPTがこれまでにSQLと同様にコンパクトな4.0 :(

ではサポートされていないようだ、されていますsemi differenceを実行する別の方法:

例えば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); 
+0

しかし、SQL Server CompactではEXCEPTはサポートされていません – ErikEJ

+0

@ErikEJ:私の答えは更新されました。ここでいくつかの票を投じるように気をつけます;) – onedaywhen

関連する問題