2016-03-25 4 views
0

これは、データベースからユーザーを選択し、もはや存在しないものを削除することによって私に渡されたコードです。今は動作しますが、これを処理するより良い方法があると思います。これを処理するより良い方法はありますか? (Psql、TOADを使用)

このリクエストを処理する他の方法がある場合は、私はちょうど意見を得ています。どのような入力をありがとう。

SELECT uvt.user_id, 
      ulp.user_id, 
      uj.user_id, 
      uw.user_id, 
      pu.user_id 
    FROM U_V_T uvt, 
     U_L_P ulp, 
     U_J uj, 
     U_W uw, 
     P_U pu 
    WHERE uvt.user_id NOT IN(SELECT user_id FROM users) 
    AND ulp.user_id NOT IN(SELECT user_id FROM users) 
    AND uj.user_id NOT IN(SELECT user_id FROM users) 
    AND uw.user_id NOT IN(SELECT user_id FROM users) 
    AND pu.user_id NOT IN(SELECT user_id FROM users) 
    GROUP BY uvt.user_id,ulp.user_id, uj.user_id, uw.user_id, pu.user_id 

答えて

1

これに近づくのは愚かな方法のようです。なぜあなたはそのようなユーザーのあらゆる組み合わせを望んでいますか?

私は別の上の各値を入れてunion allを使用するように傾斜させることになります。

select 'uvt' as which, user_id 
from u_v_t 
where user_id not in (select user_id from users) 
union all 
select 'ulp' as which, user_id 
from u_l_p 
where user_id not in (select user_id from users) 
union all 
select 'uj', user_id 
from u_j 
where user_id not in (select user_id from users) 
union all 
select 'uw', user_id 
from u_w 
where user_id not in (select user_id from users) 
union all 
select 'pu', user_id 
from p_u 
where user_id not in (select user_id from users); 

これはかなり速くなると本質的に同じ情報を持つ必要があります。

+0

ありがとう、私はこれを試してみる必要があります。そして、うん、私は、ユーザーの扱い方が少しずれていることに同意しなければならない。しかし、あなたは笑いを受け継いだものを手に入れます。 – Demas

関連する問題