MySql'Insert Ignore into 'クエリを使用して、別のテーブルのいくつかの値に基づいてレコードを挿入する方法

ムラリ

以下の2つのテーブルがあります。以下に説明する両方のテーブルのId列の値は自動インクリメントされます。

LoginInfo
+----+------------+-------------+
| Id | LoginName | IP |
+------+----------+-------------+
| 1 | User1 | aa.bb.cc.dd|
| 2 | User2 | xx.xx.xx.xx|
|3 | User3 | ii.ii.ii.ii|
+----+------------+-------------+

ユーザーグループ
+----+------------+-------------+
| Id | LoginName | Groups |
+------+----------+-------------+
| 1 | User1 | Group1 |
| 2 | User1 | Default |
| 3 | User2 | Group2 |
|4 | User3 | Group3 |
+----+------------+-------------+

ユーザの各LogInInfoメッセージのテーブルはで「デフォルト」グループのメンバーでなければならないユーザーグループのテーブル。したがって、上記の表では、User1は「デフォルト」グループに関連付けられていますが、User2とUser3は関連付けられていません。

UserGroupsテーブルの各ユーザーに「デフォルト」グループエントリが追加されているかどうかを確認したいと思います。使用可能な場合は[挿入を無視]、そうでない場合はそのユーザーの新しいレコードを挿入します。

私が試したmysqlクエリは
INSERT IGNORE INTO USERGROUPS(LOGINNAME, GROUPS) SELECT LOGINNAME, 'Default' FROM LOGININFO L WHERE L.IP IS NOT NULL;
、実行後、影響を受ける3行として表示されるメッセージであり、UserGroupsテーブルは次のようになります。

+----+------------+-------------+
| Id | LoginName | Groups |
+------+----------+-------------+
| 1 | User1 | Group1 |
| 2 | User1 | Default |
| 3 | User2 | Group2 |
| 4 | User3 | Group3 |
| 5 | User1 | Default |
| 6 | User2 | Default |
|7 | User3 | Default |
+----+------------+-------------+

しかし、私が実際に探しているのは以下のとおりです

+----+------------+-------------+
| Id | LoginName | Groups |
+------+----------+-------------+
| 1 | User1 | Group1 |
| 2 | User1 | Default |
| 3 | User2 | Group2 |
| 4 | User3 | Group3 |
| 5 | User2 | Default |
|6 | User3 | Default |
+----+------------+-------------+

クエリまたは回避策に関する提案をお知らせください。

fthiella

INSERT IGNOREを実行する前に、一意の制約を追加する必要があります。

ALTER TABLE UserGroups ADD UNIQUE (LoginName, Groups)

次に、次のクエリを実行できます。

INSERT IGNORE INTO USERGROUPS(LOGINNAME, GROUPS)
SELECT LOGINNAME, 'Default'
FROM LOGININFO
WHERE IP IS NOT NULL

このフィドルをご覧ください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ