2010-02-26 27 views
1

目前我有一个pysqlite数据库,我用来存储道路条件列表。然而,这个列表的来源是错误的,有时会产生重复。其中一些重复项将会交换开始和结束点,但其他一切都是相同的。pysqlite,查询重复项与交换列

的方法我目前有看起来像这样:

def getDupes(self): 
    '''This method is used to return a list of dupilicate entries 
    ''' 
    self.__curs.execute('SELECT * FROM roadCond GROUP BY road, start, end, cond, reason, updated, county, timestmp HAVING count(*)>1') 
    result = self.__curs.fetchall() 

    def getSwaps(): 
     '''This method is used to grab the duplicates with swapped columns 
     ''' 
     self.__curs.execute('SELECT * FROM roadCond WHERE ') 
     extra = self.__curs.fetchall() 
     return extrac 

    result.extend(getSwaps()) 

    return result 

的初始查询作品,但我怀疑它(我认为这是一个更好的办法,我只是不知道),但我并非所有人都知道如何使内在方法奏效。

谢谢你提前。 :-D

回答

0

代替第一查询,你可以使用

SELECT DISTINCT * FROM roadCond 

将检索表中的所有记录,删除任何重复。

至于内部方法,该查询将返回所有具有“重复”的记录,其中startend被交换。请注意,对于每个具有“重复”的记录,此查询将返回“原始”和“复制”。

SELECT DISTINCT * FROM roadCond WHERE EXISTS (
    SELECT * FROM roadCond rc2 WHERE 
     roadCond.road = rc2.road AND 
     roadCond.end = rc2.start AND roadCond.start = rc2.end AND 
     roadCond.cond = rc2.cond AND 
     ... AND 
     roadCond.timestamp = rc2.timestamp) 

编辑:检测和删除“重复”与startend交换,你可以确保您的数据始终包含在同一顺序排列这些值:

UPDATE roadCond SET start = end, end = start WHERE end < start; 

但这种方法只适用于无关紧要的问题。

+0

所以我想要的是重复项目的清单,而不是列表,重复项目被删除。最后,我希望将重复的项目从表格中删除,以便它们在将​​来的查询中不显示。 此外,数据是半自动生成的。然而,有些时候,它会变得混乱,重复的条目会在我从中获取值的地方创建。所以我没有任何方法可以知道天气,也没有重复数据甚至在我将它们放入数据库之前交换了值,因为我试图使用查询来确定并检索它们。 谢谢。 – 2010-03-02 15:10:16