我有以下查询,它返回结果集中的13行。如果我取消注释l.line_no
,则查询将返回结果集中的19行。我在过去一小时内多次运行此操作并确认数据集未发生变化。
我缺少一些关键的SQL逻辑吗?根据我的经验,添加列不应该添加行。
select distinct
-- l.line_no,
l.item_no,
l.Ord_no as ord_no,
(select top 1
pro_no
from
wsPKGShipment s
where
s.Shipment_No = max(p.Shipment_No)
order by s.shipped_dt + s.shipped_tm desc) as pro_no
from
wsPKGLin l
join
wsPKG p on p.PKG_ID = l.PKG_ID
where ltrim(l.Ord_no) = '<order number>'
答案 0 :(得分:2)
您必须关注查询的distinct子句。如果您有此示例数据:
c1 | c2 | c3
a | a | c
b | b | c
a | a | d
你写道:
select distinct c1, c2 from mytable
您将获得列c1和c2的不同组合:
c1 | c2
a | a
b | b
但是,如果你将查询变为:
select distinct c1, c2, c3 from mytable
您将显示一条额外的记录,因为它与添加新列的前两个记录不同:
c1 | c2 | c3
a | a | c
b | b | c
a | a | d
答案 1 :(得分:1)
select distinct
适用于所有所选列。如果添加另一列,则它也适用于该列。
因此,这种行为并不令人惊讶。如果您查看19行,除了lineno
之外,您可能会看到13组值。