0

我有一张像

+----+----------+----------+---------+
| ID | ParentID | IsSource |  Value  |
+----+----------+----------+---------+
|  1 |        1 |        1 | Car     |
|  2 |        1 |        0 | Coche   |
|  3 |        2 |        1 | Car     |
|  4 |        2 |        0 | Auto    |
|  5 |        3 |        1 | House   |
|  6 |        3 |        0 | Hogar   |
|  7 |        4 |        1 | Bus     |
|  8 |        4 |        0 | Autobus |
+----+----------+----------+---------+

但是有 160 万个条目

我喜欢获取包含相同值但不同 ID(或 ParentID)的条目,并且仅适用于具有“IsSource = 1”的条目为此,我在同一个表中使用了 INNER JOIN 语句

SELECT seg1.ParentID , seg2.ParentID FROM tblSegment seg1
INNER JOIN tblSegment seg2 ON
seg1.Value  = seg2.Value  AND
seg1.ID!= seg2.ID
WHERE seg1.isSource = 1 and seg2.isSource = 1

尽管我已为所有字段编制索引,但出现内存不足错误,但我使用了上述查询的许多变体,结果相同

有没有其他方法可以在合理的时间内获得预期的结果?

4

2 回答 2

0

对于您的 SQLite 数据库来说,这似乎是太多的数据。

您可以尝试创建一个 VIEW也许可行。否则,您可能应该更改您的数据库模型,以便您不需要该连接。

于 2013-05-27T07:46:40.753 回答
0

AGROUP BY可能更容易让数据库处理,尽管选择 ParentID 有点奇怪,其中 ID 不同,您的示例查询会像这样;

SELECT MIN(ParentID) p1, MAX(ParentID) p2
FROM tblSegment
WHERE IsSource=1
GROUP BY Value
HAVING COUNT(ID)>1

如果您想查找 ParentID 的不同之处,请改用;

SELECT MIN(ParentID) p1, MAX(ParentID) p2
FROM tblSegment
WHERE IsSource=1
GROUP BY Value
HAVING COUNT(DISTINCT ParentID)>1
于 2013-05-27T09:56:58.867 回答