我有一张像
这样的表格+----+----------+----------+---------+
| 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
虽然我已经为所有字段编制索引但是我得到了内存不足的错误 我使用了上面查询的许多变体,结果相同
有没有其他方法可以在合理的时间内获得预期的结果?
答案 0 :(得分:0)
对于您的SQLite数据库来说,这似乎太多了。
你可以试试creating a VIEW也许这样可行。否则,您可能应该更改数据库模型,以便不需要该连接。
答案 1 :(得分:0)
对于数据库来说,GROUP BY
可能更容易处理,虽然选择一个ID不同的ParentID会有点奇怪,你的样本查询会是这样的;
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