以下の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 |
+----+------------+-------------+
クエリまたは回避策に関する提案をお知らせください。
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]
コメントを追加