2017-10-13 11 views
0

私の研究では、糖尿病と併発する全ての疾患、すなわち、糖尿病とその疾患の両方の医療記録を有する少なくとも1人の患者が列記されていることにより、糖尿病に関連する疾患を見たいと思う。最初に私はこのクエリを試してみます:FROM句を追加すると、メインクエリのサブクエリでWHERE条件の影響が解決されるのはなぜですか?

use [ng_data] 
select distinct [disease] 
from [dbo].[Final_View_2] 
where [encode_id] in 
(
    select [encode_id] 
    where [disease] like '%diabetes%' 
) 

ここで、encode_idは患者のIDです。しかし、このクエリは、名前に「糖尿病」が含まれている疾患だけを返します。サブクエリの条件がメインクエリの結果に影響するようです。それが正常に動作する

use [ng_data] 
select distinct [disease] 
from [dbo].[Final_View_2] 
where [encode_id] in 
(
    select [encode_id] 
    from [dbo].[Final_View_2] 
    where [disease] like '%diabetes%' 
) 

は、その後、私はこのクエリをしようとします。サブクエリにfrom句を追加すると、メインクエリでサブクエリのwhere句の影響を解決できるようです。誰かがクエリの実行方法とそのような結果を生成する理由を説明できますか?私はサブクエリに対するメインクエリの依存によって混乱しています。

答えて

0

最初のクエリは相関サブクエリのように動作します。つまり、参照している行は外部クエリの結果セットに由来します。実際には、「は、この列の '%diabetes%'」のような列の値です。したがって、外側のクエリにそのWHERE句を置くことは変わりません。病気の欄を参照することなく最初の結果セットにそのencodeidを持っているすべての行を選択、あなたは病気列に糖尿病を持っているencodeidsの二次結果セットを作成し、されている、あなたのサブクエリでFROMを追加することにより

各クエリの実行計画を見て、何が実行されているかを確認してください

関連する問題