3

値をとして格納する2つのテーブルがありますVARCHAR
テーブルにデータを入力していますが、他のテーブルに値が存在しない場合は、テーブルの1つに値を挿入するだけです。
何かのようなもの:

INSERT IF IS EMPTY(SELECT * FROM t1 where v='test') INTO t2 (v) VALUES ('test')

どうやってやるの?

4

5 に答える 5

6

ある種のINSERT...SELECTクエリを使用する必要があります。

更新(明確化後):たとえばt2、対応する行がまだ存在しない場合に行を挿入する方法は次のt1とおりです。

INSERT INTO t2 (v)
  SELECT temp.candidate
  FROM (SELECT 'test' AS candidate) temp
  LEFT JOIN t1 ON t1.v = temp.candidate
  WHERE t1.v IS NULL

同じクエリで複数の行を挿入するには、これ以上のことはありません。

INSERT INTO t2 (v)
  SELECT temp.candidate
  FROM (
      SELECT 'test1' AS candidate
      UNION SELECT 'test2'
      UNION SELECT 'test3' -- etc
  ) temp
  LEFT JOIN t1 ON t1.v = temp.candidate
  WHERE t1.v IS NULL

元の回答

たとえば、これは、句を満たすother_columnすべての行から取得し、として使用される値を使用して行をに挿入します。重複キーエラーは無視されます。table1WHEREtable2column_name

INSERT IGNORE INTO table2 (column_name)
  SELECT table1.other_column
  FROM table1 WHERE table1.something == 'filter';
于 2012-09-25T21:36:11.447 に答える
4

複数の列を挿入する場合は、これを試すことができます。

INSERT INTO table_1 (column_id,column_2,column_3,column_4,column_5)
 SELECT
    table_2.*
FROM
    table_2
LEFT JOIN table_1 ON table_1.column_id = table_2.column_id
WHERE
    table_1.column_id IS NULL;
于 2016-09-12T09:52:17.517 に答える
1
INSERT IGNORE INTO table_1(col1,col2,col3,col4)
  SELECT table_2.*
  FROM table_2;

上記のステートメントは、シナリオで完璧な仕事をします。

  1. 1行目:主要な制約を無視して、データを複製するテーブルを記述します。
  2. 2行目:データの取得元となるテーブルと列を選択します
  3. 3行目:データの複製元のテーブルを示します
于 2020-09-16T19:31:37.477 に答える
-2
$result = mysql_query("SELECT * FROM t1 WHERE v='test'");
if(mysql_num_rows($result) == 0){
    mysql_query("INSERT INTO t2 (v) VALUES ('test')");
}

しばらくmysqlを使用していないため、これらの関数は非推奨になっていますが、これが私が行うべき方法です。

于 2012-09-25T21:57:58.847 に答える
-2

ちょっとゲットー..しかし動作します。'col'に静的な値を挿入していると仮定します

INSERT INTO t1 (col)
SELECT 'test' 
  FROM t2
 WHERE (SELECT count(*) FROM t2 WHERE v='test') = 0;
于 2012-09-25T22:06:02.627 に答える