MySQL では、タプルを変数のように使用できます。
これはあなたの声明です:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
問題は「名前とID」です。それをタプルに変えます:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE (name, id) NOT IN (SELECT name, id FROM T_sales);
個人的には、これがあまり好きではない理由が 2 つあります。変数としてのタプルは他の RDBMS では機能しない (または別の方法で機能する) ことと、IN は多くの状況でパフォーマンスが低下する傾向があるため、そうしないことを習慣化したいのです。で使用。
jhonny-d-cano-leftware が述べているように (私は彼をアップモッドしました)、存在しない場所を使用します:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h a
WHERE not exists (
SELECT *
FROM T_sales b
where b.id = a.id and b.name = a.name);