マップ系のテーブルとかで重複したレコードを除きつつ、INSERTを行うには、 NOT EXISTS を使います。
INSERT INTO eip_t_acl_user_role_map(user_id,role_id) SELECT user_id,(SELECT role_id FROM eip_t_acl_role WHERE role_name = '権限名' limit 1) FROM turbine_user WHERE disabled != 'T' AND NOT (login_name = 'admin' OR login_name = 'anon' OR login_name = 'template') AND NOT EXISTS( SELECT * FROM eip_t_acl_user_role_map WHERE eip_t_acl_user_role_map.user_id = turbine_user.user_id AND role_id = (SELECT role_id FROM eip_t_acl_role WHERE role_name = '権限名' LIMIT 1));
なお、JavaとかでこのSQLを流し込む場合には executeQuery も executeUpdate も使えないので注意が必要です。executeで流し込んであげてください。
executeUpdateで実行してみると、以下のようにしてUPDATE内でSELECTを使うな、と怒られます。
Can not issue SELECT via executeUpdate()
executeQueryを使ってみると、以下のようなエラーが出ます。
Can not issue data manipulation statements with executeQuery().