使用查询结果作为子查询语法

时间:2017-04-10 17:38:46

标签: sql sql-server

我有一个表,我需要识别重复的条目来删除它们。我可以使用以下查询找到重复项

select s.*, t.* 
from [tableXYZ] s
join (
    select [date], [product], count(*) as qty
    from [tableXYZ]
    group by [date], [product]
    having count(*) > 1
) t on s.[date] = t.[date] and s.[product] = t.[product]
ORDER BY s.[date], s.[product], s.[id]

然后需要使用此表中的结果来显示[fieldZ] IS NULL

的位置

我尝试过以下操作,但收到错误The column 'date' was specified multiple times for 'subquery'.

select * from
(
    select s.*, t.* 
    from [tableXYZ] s
    join (
        select [date], [product], count(*) as qty
        from [tableXYZ]
        group by [date], [product]
        having count(*) > 1
    ) t on s.[date] = t.[date] and s.[product] = t.[product]
) as subquery
where [fieldZ] is null

1 个答案:

答案 0 :(得分:2)

您的子查询中有列日期两次,因为您选择了s.*t.*,这将返回s.Datet.date。如果您需要两列,请将其中一列作为别名。

您还将使用product列遇到此问题。您的子查询不能返回具有相同名称的多个列。仅在子查询中选择所需的列,而不是选择所有列。这是一个很好的做法,将解决这个问题。