Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: .:UND3R:. en 21 Agosto 2016, 05:54 am



Título: Insertar datos no repetidos
Publicado por: .:UND3R:. en 21 Agosto 2016, 05:54 am
Hola a todos, tengo un pequeño problemita, tengo una tabla la cual ya está con muchos datos, el problema surge que deseo insertar más datos pero el problema de estos es que hay algunos repetidos, la única manera de poder diferenciar estos es a través de los campos i_type y i_id juntos:

Código:
i_type	i_id	size_x	size_y	name
0 0 1 2 Kris
0 1 1 3 Short Sword
0 2 1 3 Rapier
0 3 1 3 Katana
0 4 1 3 Sword of Assassin
1 1 1 3 Blade
1 2 1 3 Gladius
1 3 1 3 Falchion
1 4 1 3 Serpent Sword
2 1 2 3 Sword of Salamander
2 2 2 4 Light Saber
2 3 2 3 Legendary Sword
2 4 2 3 Heliacal Sword
0 5 1 3 Double Blade
.......
....
.

Mi idea es la siguiente:

Insertar los datos solo si no existe una fila con un i_type y i_id igual, ¿cómo podría hacer esto? Es decir que si insertara esto:

Citar
2   4   1   5   Sword Black

no se debería insertar pues ya existe una fila en la tabla que posee un 2 y un 4:
Citar
2   4   2   3   Heliacal Sword

No sé si se entienda, espero su ayuda, muchas gracias :)

PD: Microsoft SQL Server


Título: Re: Insertar datos no repetidos
Publicado por: dopr en 22 Agosto 2016, 03:59 am
No entiendo mucho de bases de datos, y menos de MS SQL Server pero intenta algo como añadir un WHERE al final de la consulta, que solo inserte los datos cuando i_type y i_id no sean iguales a los del registro que se está intentando crear.

Código:
WHERE i_type <> typeactual AND i_id <> idactual

Espero que te sirva.


Título: Re: Insertar datos no repetidos
Publicado por: AlbertoBSD en 22 Agosto 2016, 04:15 am
La idea quw se me ocurre pero que no se si se pueda implementar es hacer que la tabla tenga un campo "unico" y que este se genere en automatico al realizar el insert con la concatenación de los 2 datos mencionados y si este ya existe no se insertara, tal vez se pueda manejar con triggers o similar.


Título: Re: Insertar datos no repetidos
Publicado por: dopr en 22 Agosto 2016, 14:32 pm
La idea quw se me ocurre pero que no se si se pueda implementar es hacer que la tabla tenga un campo "unico" y que este se genere en automatico al realizar el insert con la concatenación de los 2 datos mencionados y si este ya existe no se insertara, tal vez se pueda manejar con triggers o similar.

Puedes hacer una clave primaria autoincrementable (Seria como otro id más, pero asignado automáticamente por la BBDD):

Código:
CREATE TABLE ejemplo (
 id_unico mediumint(8) unsigned default null auto_increment,
 -- los campos que tu quieras...
 PRIMARY KEY (id_unico)
);



Título: Re: Insertar datos no repetidos
Publicado por: AlbertoBSD en 22 Agosto 2016, 14:35 pm
El usuario comenta que tiene que ser unico solo si 2 valores coinciden

Citar
Insertar los datos solo si no existe una fila con un i_type y i_id igual,


Título: Re: Insertar datos no repetidos
Publicado por: user-marcos en 22 Agosto 2016, 14:46 pm
Has probado en usar una clave primaria de dos campos;
primary key (i_type, i_id size_x)