|
Тема |
Re: Идея .. [re: mr.vain] |
|
Автор |
salle (един такъв) |
|
Публикувано | 21.04.05 10:02 |
|
|
Ако предположим, че дупките са само от една стойност т.е. няма две или повече опследователни липсващи числа то ето го частното решение:
mysql> SELECT id2 - 1 FROM
(SELECT @i = id AS i, @i := id + 1 AS id2 FROM d ORDER BY id) AS t1
WHERE id2 NOT IN (SELECT id FROM d);
+---------+
| id2 - 1 |
+---------+
| 11 |
| 16 |
| 20 |
| 22 |
| 24 |
| 30 |
+---------+
Тук последният ред е излишен, но той е най-лесно да се изреже пък и той всъщност отговаря на усволието (следващият ред не съдържа +1 просто защото не същестува)
Освен това предположението което правя в началото също може да се изведе от начина по който поставяш условието
"тези, след който има дупка"
т.е. ако изтрием реда с 13 например то дупката състояща се от 12, 13 се намира след 11 и резултатът продължава да е верен:
mysql> delete from d where id = 13;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT id2 - 1 FROM (SELECT @i = id AS i, @i := id + 1 AS id2 FROM d ORDER BY id) AS t1 WHERE id2 NOT IN (SELECT id FROM d);
+---------+
| id2 - 1 |
+---------+
| 11 |
| 16 |
| 20 |
| 22 |
| 24 |
| 30 |
+---------+
|
| |
|
|
|