我有一個超過100萬行的大型MySQL數據庫。我怎樣才能找到失蹤的開齋節?我如何在mysql中找到缺少的ID
+----+-----+
| id | eid |
+----+-----+
| 1 | 1 |
+----+-----+
| 2 | 2 |
+----+-----+
| 3 | 4 |
+----+-----+
我想列舉所有遺漏的eid's,在這個例子中是3。我嘗試了很多東西,但是我所做的一切都需要很多時間。
我希望有人能幫助我。
感謝
我有一個超過100萬行的大型MySQL數據庫。我怎樣才能找到失蹤的開齋節?我如何在mysql中找到缺少的ID
+----+-----+
| id | eid |
+----+-----+
| 1 | 1 |
+----+-----+
| 2 | 2 |
+----+-----+
| 3 | 4 |
+----+-----+
我想列舉所有遺漏的eid's,在這個例子中是3。我嘗試了很多東西,但是我所做的一切都需要很多時間。
我希望有人能幫助我。
感謝
您可以使用NOT EXISTS
找到所需的行。
create table t(id integer, eid integer);
insert into t values(1,1);
insert into t values(2,2);
insert into t values(3,4);
SELECT id
FROM t a
WHERE NOT EXISTS
(SELECT 1
FROM t b
WHERE b.eid = a.id);
或使用NOT IN
:
SELECT ID
FROM t
WHERE ID NOT IN
(SELECT EID
FROM t);
生產:
| id |
|----|
| 3 |
查找重複的號碼很簡單:
select number,count()from sequence group by id having count()> 1;
在這種情況下,沒有重複,因爲我沒有專注於這篇文章(找到重複是足夠簡單的,我希望你可以看到它是如何完成的)。儘管如此,我不得不搔頭尋找序列中缺失的數字。這是我在這第一炮:如爲L 左外連接序列上l.id [R從序列開始
選擇l.id + 1 + 1 = r.id 其中r.id爲null;
這個想法是排除連接對相同的序列,但移動了一個位置。具有相鄰號碼的任何號碼都將成功加入,並且WHERE子句將消除成功的匹配,留下缺少的號碼。結果如下:
https://www.xaprb.com/blog/2005/12/06/find-missing-numbers-in-a-sequence-with-sql/
也許5也不存在了。 – Strawberry