0

在两个表上执行左外连接语句后,我可能会收到更多的 ID。

背景:我已经从较大的数据集中缩小了两个表。以下是我在从较大的数据集中进行选择后用来获取可能的 ID 的查询。我正在尝试根据 personID 将两个数据集连接在一起。我正在执行 LEFT JOIN,因为我想保留 smallset 表中的所有数据,同时将其与缩小数据表中的数据配对。

在对较大数据集的子集运行此查询时,我收到以下 ID:

select s.personID from st.smallerset as s;

41486
41490
41493
41496
 ...

现在,在运行第二个查询时,我收到以下信息:

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

我收到以下查询:

41544
41577
41595
41605
 ...

到目前为止,一切都很好。一切都如预期的那样。但是,当我尝试加入这两个子集时运行下一个子查询时,会得到意想不到的结果。

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

此结果中包含的数据未包含在任一先前查询中。特别是 ID 414854148941496。我不知道为什么会出现这些 ID,因为当我将查询分解为单独的查询时,我得到了我需要的 ID。

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 回答