为什么以下查询不能删除重复的行?

时间:2016-02-10 15:41:16

标签: sql oracle11g

我已经了解到,在相关查询中,子查询对主查询的每一行执行一次。我尝试了以下查询。

// call and print getInstructionForCurrentDay inside a loop here
for (currentDay = 1; currentDay < NUMBER_OF_DAYS +1; currentDay++) {
    currentDay = 30 - (NUMBER_OF_DAYS - currentDay);
    result = getInstructionForCurrentDay(currentDay);
    System.out.println("DAY " + currentDay + result);
}

...

public static String getInstructionForCurrentDay(int currentDay) {

    if (currentDay % 5 == 0 && currentDay % 3 ==0  ){
        result = ":glide";
    }
     else if (currentDay % 3 == 0){
        result = ":feed worms";
    }
    else if (currentDay % 5 == 0){
        result = ":time to bath";
    }
    else {
        result = ":give fruit and water";
    }

    return result;
}

我对上述查询的理解是:对于每一行,子查询找到与当前行具有相同值的其他行的编号,如果有超过1个这样的行,则主查询将删除CURRENT ROW。因此,在此过程中,重复项将被删除,但实际上所有行都将被删除。我哪里错了。

注意: - 请不要提供删除重复项的查询。请帮助我,在我理解的地方,我错了。

进一步解释我的理解:让三行具有值5.在第一行,子查询返回计数3,因此第一行被删除。对于第二行,子查询返回计数2,因此删除第二行。对于第三行,子查询返回计数1,因此不删除第三行。

1 个答案:

答案 0 :(得分:0)

如果你使用游标或某种循环,那你就是对的。

你在想的是:它将获得第一个重复的ID,删除它,当它到达另一个时,条件将不再成立。这不正确 - 当您使用这样的地方删除时,它会标记所有需要删除的内容,并将它们全部删除,而不是一个一个地删除。因此,重复的两个ID都将被标记为应该被删除。

如果您使用光标或循环,那么它就像您计划的那样。

您可以在oracle HERE

中看到删除重复项