在两个表上执行左外连接语句后,我可能会收到更多ID。
上下文:我从较大的数据集中缩小了两个表。以下是从较大的数据集中选择后我用来获取ID的查询。我正在尝试根据personID加入两个数据集。我正在执行LEFT JOIN,因为我想保留smallerset表中的所有数据,同时将它与来自窄数据表的数据配对。
在对较大数据集的子集运行此查询时,我会收到以下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 41485
,41489
,41496
等。我无法理解这些ID出现的原因,因为当我将查询分解为单独的查询时,我得到了我需要的ID。
答案 0 :(得分: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允许它(即使它没有意义),并产生不可预测的结果。
尝试删除它。
答案 1 :(得分: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
)
OR
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
)