summaryrefslogtreecommitdiff
path: root/docs/es/how-to-obtain-free-records.md
blob: 64f2cdaf46b20a157c6a259ca661628585840671 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Cómo obtener registros libres

En algunas ocasiones, necesitamos obtener o conocer registros cuyos valores no están siendo ocupados.

Ya sea porque queremos insertar un nuevo valor, o porque queremos reestructurar nuestra tabla después de un tiempo.

Para ello, puede utilizar el siguiente script:

```sql
SELECT t.id + 1
FROM Table1 t
WHERE NOT EXISTS (
    SELECT * 
    FROM Table1 t2
    WHERE t2.id = t.id + 1
)
LIMIT 1
```

Debemos sustituir el nombre de la tabla, y los atributos que buscamos.

Ahora veamos un ejemplo. Supongamos que queremos buscar el primer registro libre dentro de `creature`.

Lo primero que tenemos que identificar es su clave primaria: `guid`.

```sql
SELECT t.`guid` + 1
FROM `creature` t
WHERE NOT EXISTS (
    SELECT * 
    FROM `creature` t2
    WHERE t2.`guid` = t.`guid` + 1
)
LIMIT 1
```

Al ejecutar la consulta, obtendremos como resultado en este caso, el número **15**.

**Nota:** Actualmente el valor cambio, y ahora es otro. Pero en su momento era el numero 15.

Lo que debemos hacer ahora es comprobar que este valor no se está utilizando, mediante un `SELECT`.

```sql
SELECT * FROM `creature` WHERE `guid`=15;
```

Para corroborar que la información es correcta, les dejamos los 16 primeros registros.

| guid | id    | map | zoneId |
|------|-------|-----|--------|
| 1    | 2843  | 0   | 0      |
| 2    | 7853  | 0   | 0      |
| 3    | 2499  | 0   | 0      |
| 4    | 2838  | 0   | 0      |
| 5    | 2839  | 0   | 0      |
| 6    | 2626  | 0   | 0      |
| 7    | 2482  | 0   | 0      |
| 8    | 8123  | 0   | 0      |
| 9    | 9459  | 0   | 0      |
| 10   | 9520  | 0   | 0      |
| 11   | 1215  | 0   | 0      |
| 12   | 1218  | 0   | 0      |
| 13   | 30140 | 571 | 0      |
| 14   | 30156 | 571 | 0      |
| 16   | 32442 | 571 | 0      |

Como puede ver, el número 15 está disponible.

**Note:** la tabla tiene muchos más atributos, pero sólo mostramos algunos, para que la tabla no sea tan extensa.