0

2つのテーブルで左外部結合ステートメントを実行した後、さらに多くのIDを受け取ることができます。

コンテキスト:より大きなデータセットから2つのテーブルを絞り込みました。以下は、より大きなデータセットから選択した後に可能なIDを取得するために使用したクエリです。personIDに基づいて2つのデータセットを結合しようとしています。絞り込んだデータテーブルのデータとペアリングしながら、小さいセットのテーブルにすべてのデータを保持したいので、LEFTJOINを実行しています。

より大きなデータセットのサブセットでこのクエリを実行すると、次のIDを受け取ります。

select s.personID from st.smallerset as s;

41486
41490
41493
41496
 ...

ここで、2番目のクエリを実行すると、次のメッセージが表示されます。

select r.* from st.secondlargedataset as r,
st.condition as h where r.personID=h.personID group by r.personID;

次のクエリを受け取ります。

41544
41577
41595
41605
 ...

ここまでは順調ですね。すべてが期待どおりです。ただし、これら2つのサブセットを結合しようとしてこの次のサブクエリを実行すると、予期しない結果が得られます。

select s.personID
from st.smallerset as s left join
(select r.* from st.secondlargedataset as r,
 st.condition as h where r.personID=h.personID group by r.personID) as v on 
s.personID=v.personID;

41485
41486
41489
41490
41493
41496
41510
41512
41513
41516

この結果には、以前のクエリに含まれていないデータが含まれています。具体的には、41485IDなどです。クエリを個別のクエリに分割すると、必要なIDが取得されるため、これらのIDが表示される理由がわかりません。4148941496

4

2 に答える 2

1

あなたの問題はこのクエリにあると思います:

select r.*
from st.secondlargedataset as r, st.condition as h
where r.personID=h.personID
group by r.personID;

このgroup byステートメントは、ほとんどの SQL 実装では違法ですが、SAS では (無意味ですが) 許可されており、予測できない結果が生じます。

削除してみてください。

于 2012-04-20T14:30:03.117 に答える
0

以下を試してください

SELECT s.personID FROM st.smallerset AS s WHERE s.personID IN ( SELECT r.personID FROM st.secondlargedataset AS r, st.condition AS h WHERE r.personID = h.personID GROUP BY r.personID )

また

SELECT s.personID FROM st.smallerset AS s WHERE s.personID IN ( SELECT r.personID FROM st.secondlargedataset AS r INNER JOIN st.condition AS h ON r.personID = h.personID GROUP BY r.personID )

于 2012-04-20T02:56:49.210 に答える