0

私はMySQLを使用しています。別のテーブルに存在しないレコードをテーブルに挿入したいと考えています。だから私はこのようなことをしたい:

INSERT INTO sales (name, id)
SELECT name, id FROM sales_h 
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);

問題は、MySQL がこの種の構文を許可していないことです (where 句と関係があります...) CONCAT を使用してみましたが、結果はありませんでした。

どんな手掛かり??

4

7 に答える 7

1
INSERT
INTO    sales (name, id)
SELECT  name, id
FROM    sales_h
WHERE  (name, id) NOT IN
       (
       SELECT name, id
       FROM t_sales
       )
于 2009-04-06T13:31:19.413 に答える
1

EXISTS 構文を試しましたか?

INSERT INTO sales (name, id) 
SELECT name, id 
FROM sales_h 
WHERE NOT EXISTS (SELECT * FROM T_sales WHERE T_sales.name = sales_h.name AND T_sales.id = sales_h.id);
于 2009-04-06T13:33:14.260 に答える
1

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);
于 2009-04-06T13:51:47.167 に答える
0
INSERT INTO table_name(column1, column2) SELECT "value one", "value two" FROM DUAL
WHERE NOT EXISTS(
    SELECT column1 FROM table_name
    WHERE column1 = "value one"
    AND column2 = "value two" LIMIT 1
)
于 2009-08-03T08:55:00.020 に答える
0

ON DUPLICATEMySqlの句を調べるかもしれません

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

于 2009-04-06T13:30:41.070 に答える
0

WHERE name AND id NOT IN とは言えません...それぞれに個別の句が必要です。しかし、テーブル T_sales の主キーとして id を持っていますか? もしそうなら、それはあなたがチェックする必要があるすべてです、次のようなものをsp:

INSERT INTO sales (name, id) 
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));

編集

うーん、他の人の答えから、彼らはもっと知っているように見えるので、私を無視するのが最善かもしれません:-)

于 2009-04-06T13:30:54.157 に答える
0

問題はあなたの場所です。

あなたのように読んでいるわけではありません。「WHERE (name and id) NOT IN (...)」と読んでいますが、「WHERE name (isn't null) AND (id NOT IN (...))」と読んでいます。 . 私の言いたいことが理解できれば.

これに変更します。ROW(name, id) NOT IN (SELECT name, id FROM T_sales);

于 2009-04-06T13:31:30.413 に答える