2011-09-29 46 views
1

我想在SQLite中只有那些有多個要連接的行的記錄中執行組concat concat。看起來你可以預先這樣做(在使用group_concat之前,先使用一個組來計算記錄,然後再刪除這些單例行);之後(完成group_concat然後刪除無連接的行);甚至可能在?group_concat只有當多於一組時

我的問題:SQLite完成此操作的最快方法是什麼?

我已經制定了一個例子,使用Python APSW「後」,但我不喜歡它:

#set up a table with data 
c.execute("create table foo(x,y)") 
def getvals(): 
    a = [1, 1, 2, 3, 3] 
    b = ['a','b','c','d','e'] 
    for i in range(5): 
     yield a[i],b[i] 
c.executemany("insert into foo values(?,?)",getvals()) 
c.execute('''create table fooc(a,b); 
    insert into fooc(a,b) select x, group_concat(y) from foo group by x''') 
c.execute('select * from fooc') 
c.fetchall() ## reports three records 
c.execute("select * from fooc where b like '%,%'") 
c.fetchall() ## reports two records .. what I want 

似乎瘋了(而緩慢?)使用像這種需要。

回答

1

添加HAVING子句查詢:

INSERT INTO fooc(a,b) 
    SELECT x, group_concat(y) 
     FROM foo 
    GROUP BY x 
    HAVING COUNT(*) > 1 
+0

非常感謝。這是一個明顯的......但我還沒有看到一個。感謝您花時間回答。 – Tim