我有兩個表user
和pair
。我想獲得每個user.name
重複對(a, b)
的數量。SQLite子查詢:「IN」外部查詢的結果
用戶
name | id
-------------
"Alice" | 0
"Bob" | 1
"Alice" | 2
對
id | a | b
-----------
0 | 0 | 1
0 | 1 | 3
1 | 0 | 1
2 | 1 | 3
在上面的例子中,結果應該是:
name | id | c
-------------------
"Alice" | 0,2 | 1
"Bob" | 1 | 0
當僅存在一個id
爲EAC^h用戶,我可以這樣做:
SELECT name, id, (
SELECT COUNT(*) FROM pair JOIN pair AS p USING (id, a, b)
WHERE id = user.id AND pair.rowid < p.rowid
) AS c FROM user;
當有多個id
S,我可以從下面的查詢得到正確的結果,但它是相當緩慢的,當有更多的列以及更多的子查詢。
SELECT name, GROUP_CONCAT(id), (
WITH t AS (SELECT id FROM user AS u WHERE name = user.name)
SELECT COUNT(*) FROM pair JOIN pair AS p USING (a, b)
WHERE pair.id IN t AND p.id IN t AND pair.rowid < p.rowid
) AS c FROM user GROUP BY name;
我想知道,是有這樣的簡單有效的方法,如改變從pair.id = user.id
的WHERE
子句pair.id IN <<the user.id list>>
?
/* This will not work! "Error: no such table: user.id" */
SELECT name, GROUP_CONCAT(id), (
SELECT COUNT(*) FROM pair JOIN pair AS p USING (a, b)
WHERE pair.id IN user.id AND p.id IN user.id AND pair.rowid < p.rowid
) AS c FROM user GROUP BY name;
你有沒有索引? – 2014-11-24 11:54:54
@CL。如果我有索引,會更容易嗎? – 2014-11-24 15:21:36