[解決済み】MySQL。テーブルにレコードが存在しない場合、レコードを挿入する [重複]。
2022-04-17 18:35:04
質問
次のクエリを実行しようとしています。
INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name='value'
);
しかし、これはエラーを返します。基本的には、レコードの'name'フィールドがすでに別のレコードに存在する場合は、レコードを挿入したくありません。新しい名前が一意であるかどうかをチェックするにはどうすればよいですか?
どのように解決するのですか?
実際にこうしろというわけではありません。
UNIQUE
が提案するインデックス
ピスクボー
などの方がはるかに良い方法ですが、実際にあなたが試みていたことを行うことができます。
CREATE TABLE `table_listnames` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`tele` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
レコードを挿入する。
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM `table_listnames`;
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
+----+--------+-----------+------+
もう一度同じレコードを挿入してみてください。
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
+----+--------+-----------+------+
別のレコードを挿入する。
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'John', 'Doe', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'John'
) LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM `table_listnames`;
+----+--------+-----------+------+
| id | name | address | tele |
+----+--------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
| 2 | John | Doe | 022 |
+----+--------+-----------+------+
などなど...。
更新してください。
を防ぐために
#1060 - Duplicate column name
エラーが発生する可能性があるため、内部 SELECT のカラムに名前を付ける必要があります。
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Unknown' AS name, 'Unknown' AS address, '022' AS tele) AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM `table_listnames`;
+----+---------+-----------+------+
| id | name | address | tele |
+----+---------+-----------+------+
| 1 | Rupert | Somewhere | 022 |
| 2 | John | Doe | 022 |
| 3 | Unknown | Unknown | 022 |
+----+---------+-----------+------+
関連
-
[解決済み】MySQLで日付を比較する
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み】MySQL ON DUPLICATE KEY UPDATEで1クエリで複数行挿入する場合
-
[解決済み】MySQLのテーブル、インデックス、データを複製する
-
[解決済み] MySQL - 既存のフィールドを一意にする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mysql.plugin テーブルを開くことができません。mysql_upgradeを実行して作成してください。
-
[解決済み] MySQLで「一意のテーブル/エイリアスでない」場合
-
[解決済み] MySql テーブル、エラー#1064 & エラー#1068 複数の主キーが定義されている [終了] 。
-
[解決済み] MySQLにおけるOracleのRowIDに相当する。
-
[解決済み] MySQLクエリ GROUP BY 日/月/年
-
[解決済み] MySQL エラー 1241。オペランドには1つのカラムが含まれている必要があります。
-
[解決済み] アプリでSSLを有効にしていない場合、AzureのMySQLサーバーへの接続に失敗するのはなぜですか?
-
[解決済み] MySQL Workbenchが「このサーバーバージョンでは、この位置は無効です」というエラーを報告する。
-
[解決済み] MySQLの グループ関数の無効な使用
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?