2016-06-22 6 views
0

購読している人を見つけてテーブルに電子メールを挿入するクエリがあります。これを更新するには、常にテーブルを切り捨て、すべてのレコードを再度挿入します。 これは切り捨てずに毎回すべてのデータを挿入したい(非常に大きなレコードでは時間がかかる)が、変更があった場合は古いテーブルで選択してチェックし、テーブルに記録する。クエリをSQLのテーブルと比較する方法

任意のアイデアどのように私はこのソリューションにアプローチしますか?

+0

には、列に一意のインデックスがあります。 'insert ignore'を実行しても再度挿入されませんか?おそらく '重複するキーの更新を挿入する'をしますか?ちなみに、 'insert ignore'は一般的には嫌われます。 – Drew

+0

例は、あなたの問題を理解し、最良の答えに到達するのに役立ちます。 – Ajay

+0

テーブルを再作成するほうがおそらく高速です。 –

答えて

0

存在しない場合は、電子メールが存在するかどうかを確認し、そうでない場合は挿入文を書き込むことができます。以下、それはあなたの役に立てば幸い:) (メール= @ yoursuscribeemail t_emailsから選択*)が存在しない場合は t_emailsに 挿入を始める(電子メール)の値(@yoursuscribeemail) エンド 私はsuscribeメールが来ていると仮定しています例です。ユーザー側からコメントでない場合

+0

顧客に(電子メールアドレスを取得した)カラムがあります。値が1の場合は購読されていることを意味し、0の場合はテーブルの両方のフィールドを共有しています。 – david

+0

あなたに声明を書くでしょう –

0
delete from subscriber_emails 
where email in (select email from subscriber_emails e 
join users u on e.email=u.email 
where u.subscribed=false); 

insert into subscriber_emails (email) 
select email from users u 
outer join subscriber_emails e on u.email=e.email 
where e.email is null; 

2つのテーブルのスキーマがわからないので、ここでいくつかのプレースホルダを使用する必要があるため、必要に応じてキーワードを変更してください。

関連する問題