Título: SQLite3 INSERT INTO + EXCEPT [SOLUCIONADO] Publicado por: patilanz en 3 Octubre 2015, 12:14 pm Hola tengo una table:
Código
Que al ejecutar: Código
Debería de NO insertar nada, pero si lo hace. En cambio en esta tabla: Código
Al ejecutar: Código
Funciona perfecto. El PRIMARY KEY ID hace que no funcione pero no se porque. ?? Un saludo Título: Re: SQLite3 INSERT INTO + EXCEPT Publicado por: Carloswaldo en 5 Octubre 2015, 07:24 am Hola,
Yo no soy experto en SQLite pero creo que puedo deducir lo que está ocurriendo. Fíjate en la primera tabla, al hacer el primer INSERT, el campo ID (primary key) tomará un valor, digamos '1', así que tendrías el registro (1,'Jose',21). Al tratar de hacer el segundo INSERT, el ID ahora será de '2', dando como resultado el registro (2,'Jose',21). Al hacer la validación, el registro (2,'Jose',21) no es lo mismo que el registro (1,'Jose',21), por lo que la excepción no aplica y se inserta el registro. En la segunda tabla no hay campo ID, el primer INSERT será el registro ('Jose',21). En el segundo INSERT el registro que se intentará insertar será ('Jose',21), como es idéntico al anterior, la excepción aplica y no se inserta. Por cierto, ¿por qué quieres hacer esto?, ¿por qué no haces que el campo 'name' sea UNIQUE? Título: Re: SQLite3 INSERT INTO + EXCEPT Publicado por: patilanz en 5 Octubre 2015, 07:49 am Si hay tres campos y ninguno de ellos es el ID único funciona bien porque si hago EXPECT de 2 campos y en la tabla hay tres, el tercero es diferente funciona por lo tanto aunque sea
(1,'Jose',21) (2,'Jose',21) haciendo SELECT * FROM test WHERE name='Jose' AND number=21 debería de funcionar porque en el SELECT no digo que no puede otros campos y si lo ejecuto solo me salen las dos filas pero si lo junto con EXCEPT e INSERT ya nada, como si no se seleccionara nada. El nombre no es único, es único el nombre mas el numero a la vez, es decir pueden existir campos así: (1,'Jose',21) (2,'Jose',23) pero no (1,'Jose',21) (2,'Jose',21) Título: Re: SQLite3 INSERT INTO + EXCEPT Publicado por: Carloswaldo en 5 Octubre 2015, 17:23 pm Si hay tres campos y ninguno de ellos es el ID único funciona bien porque si hago EXPECT de 2 campos y en la tabla hay tres, el tercero es diferente funciona por lo tanto aunque sea (1,'Jose',21) (2,'Jose',21) haciendo SELECT * FROM test WHERE name='Jose' AND number=21 debería de funcionar porque en el SELECT no digo que no puede otros campos y si lo ejecuto solo me salen las dos filas pero si lo junto con EXCEPT e INSERT ya nada, como si no se seleccionara nada. El EXCEPT no trabaja sobre las columnas sino sobre un conjunto de registros. Imagínate que es así: Código
entonces el SELECT se ejecuta primero y te traerá los registros enteros (con todas sus columnas, incluído el id) cuyo name = 'Jose', luego el INSERT ingresará a la tabla el registro a menos que coincida exactamente con alguno de los registros que trajo el SELECT. Citar El nombre no es único, es único el nombre mas el numero a la vez, es decir pueden existir campos así: (1,'Jose',21) (2,'Jose',23) pero no (1,'Jose',21) (2,'Jose',21) ¿Qué tal un índice UNIQUE sobre las 2 columnas (name y number)? Título: Re: SQLite3 INSERT INTO + EXCEPT Publicado por: patilanz en 5 Octubre 2015, 21:11 pm Gracias por sus respuesta pero lo hice así:
Código
La table tiene ID pero no lo selecciono y se inserta solo |