2017-02-09 17 views
1

テーブル内には、2つのカラム、useridおよびroleidがあります。すべてのユーザーは少なくともroleidを持っているはずです。現在のところ約10.000のレコードがありますが、何らかの形で少数のユーザーにはこの役割はありません。行がMySQLテーブルに存在しない場合に追加する

ビジュアル例:

userid | roleid 
1   1 
1   4 
2   1 
2   4 
3   1 <---------- userid 3 misses roleid 4! 
4   1 
4   4 

それがクエリを実行し、その組み合わせが存在しない場合にユーザーIDとroleidで行を追加することは可能ですか?

答えて

4

はい。 having句の

insert into userRoles(userid, roleid) 
    select userid, 4 
    from userRoles 
    group by userid 
    having sum(roleid = 4) = 0; 

sum(role = 4)4を持っている各ユーザの行数をカウントします。 = 0には何も言われていません。

注:これにより、この表のすべてのユーザーに4の役割IDが与えられます。役割のないユーザーが存在する可能性があります。あなたがそれらをしたい場合

、その後、usersテーブルを使用します。あなたがいない4

insert into yourTable (userId, roledid) 
select userid, 4 
from yourTable 
where roleid <>4 
roleIDに持っているユーザーを検索する必要があります
insert into userRoles(userid, roleid) 
    select u.userid, 4 
    from users u 
    where not exists (select 1 from userRoles ur where ur.userid = u.userid); 
関連する問題