1

0から9999までのランダムな値をテーブルに挿入するクエリを作成しようとしていますが、このランダムな値はまだ存在していません。しかし、私が書いたものは何もありません。WHERE句がINSERTで機能しないようで、SQLサーバーがIFNOTEXISTSクエリの実行に失敗します。間違っているのかしら?私は何をすべきか?私の問題の解決策はありますか?(私はMySQLを使用しています)

SET @rand = ROUND(RAND() * 9999);
IF NOT EXISTS (SELECT `num` FROM `nums` WHERE `num` = @rand)
    INSERT INTO `nums` (`num`) VALUES (@rand);
4

3 に答える 3

1

次のように実行できます: MySQL: テーブルに存在しない場合はレコードを挿入

INSERT INTO `nums` (`num`)
SELECT *
FROM
  (SELECT @rand) AS q
WHERE NOT EXISTS
    (SELECT `num`
     FROM `nums`
     WHERE `num` = @rand);
于 2013-03-18T17:53:44.677 に答える
0

次のようなストアド プロシージャを使用して試してください。

CREATE PROCEDURE my_sp()
BEGIN
SET @rand = ROUND(RAND() * 9999);
IF NOT EXISTS (SELECT `num` FROM `nums` WHERE `num` = @rand) THEN
    INSERT INTO `nums` (`num`) VALUES (@rand);
END IF;
END
于 2013-03-18T13:49:19.400 に答える
0

IFストアド プロシージャのようにコード ブロック内でのようなステートメントの使用。mysql プロンプトだけで実行することはできません。

以前は存在しなかったランダムな値を挿入したいだけの場合は、次の方法でも実行できます

mysql> テーブル nums(num int, 一意のキー(num)) を作成します。
クエリ OK、影響を受ける行は 0 (0.05 秒)

mysql> nums に無視を挿入 >select round(rand()*9999);>
クエリ OK、影響を受ける 1 行 (0.01 >秒)>
レコード: 1 重複: 0 警告> ings>: 0>

mysql> nums select round(rand()*9999); に無視を挿入します。
クエリ OK、影響を受ける 1 行 (0.00 秒)
レコード: 1 重複: 0 警告: 0

mysql> nums select round(rand()*9999); に無視を挿入します。
クエリ OK、影響を受ける 1 行 (0.00 秒)
レコード: 1 重複: 0 警告: 0

mysql> nums select round(rand()*9999); に無視を挿入します。
クエリ OK、影響を受ける 1 行 (0.00 秒)
レコード: 1 重複: 0 警告: 0

mysql> select * from nums;
+--------+
| | 番号 |
+--------+
| | 5268 |
| | 9075 |
| | 9114 |
| | 9768 |
+--------+
4 行セット (0.00 秒)

mysql>

ではinsert ignore、行が既に存在する場合、行は挿入されません。

于 2013-03-18T17:42:38.053 に答える