2017-03-19 8 views
-1

私は以下のような質問があり、それらを最適化したいと思います。指定されたクエリで内部結合を使用して最適化する方法

car_wheels AS (
    SELECT wheel FROM devices WHERE type = '4x4' 
), 
white_wheels AS (
    SELECT wheel FROM devices WHERE color = 'white' 
), 
car_white_wheels AS (
    SELECT * FROM car_wheels INTERSECT SELECT * FROM white_wheels 
) 

SELECT wheel FROM devices JOIN users ON devices.user_id = user.id WHERE wheel IN (SELECT wheel FROM car_white_wheels) AND users.organization_id = 999; 

私はここで内部結合を使用する考えがあります。これは正しいです?私はここで簡単に他に何を最適化できますか?

特定のuser.organization_idに対してwhite car_wheelsを探したいと思います。

+3

を私は互換性のないデータベースのタグを削除しました。サンプルデータと望ましい結果があなたの問題を明確にします。 –

答えて

1

この手順はどうですか。

select wheel 
from devices d join 
    users u 
    on d.user_id = u.id 
where (type = '4x4' and color = 'white') and 
     u.organization_id = 999; 

何か不足していますか?

あるいは、wheelは複数行の特徴を持っていることができれば:

select wheel 
from devices d join 
    users u 
    on d.user_id = u.id 
where (type = '4x4' or color = 'white') and 
     u.organization_id = 999 
group by wheel 
having sum(case when type = '4x4' then 1 else 0 end) > 0 and 
     sum(case when color = 'white' then 1 else 0 end) > 0'; 
+0

@regedarekはい、それもうまくいくでしょう。 – SqlZim

+0

@regedarek。 。 。私はそれを逃しました。なぜなら、その情報は、はるか右側の質問にしかないからです。 –

関連する問題