varios valor una tabla sentencia registros registro otra nuevo modificar insertar datos consulta como cargar agregar sql ms-access insert not-exists

sentencia - modificar un valor en una tabla sql



Insertar registro en la tabla si la entrada no existe en otra tabla, con un toque adicional (3)

¿Con esto bastará? Obviamente añadir algunos corchetes y esas cosas. No demasiado en Acceder a mí mismo.

INSERT INTO table2 (file_index, celeb_name) SELECT file_index, ''Audrey Hepburn'' FROM table1 WHERE filename = ''aud'' AND file_index NOT IN (SELECT DISTINCT file_index FROM table2 WHERE celeb_name = ''Audrey Hepburn'')

Hola a todos ustedes, poderosos SQLsuperheros por ahí ... ¿Puede alguien rescatarme de un desastre inminente y la ruina?

Estoy trabajando con Microsoft Access SQL. Me gustaría seleccionar registros en una tabla (tabla1) que no aparecen en otra (tabla2) ... y luego insertar nuevos registros en la tabla 2 que se basan en registros en la tabla 1, de la siguiente manera:

[table1] file_index: nombre de archivo

[table2] file_index: celeb_name

Quiero:

Seleccione todos los registros de la tabla 1 donde [nombre de archivo] es como aud y cuyo valor [índice_archivo] correspondiente no existe en la tabla 2 con el campo [celeb_name] = ''Audrey Hepburn''

Con esa selección quiero insertar un nuevo registro en [table2]

[file_index] = [table1]. [file_index] [celeb_name] = ''Audrey Hepburn''

Hay una relación de uno a muchos entre [file_index] en [table1] y [table2] Un registro en [table1], a muchos en [table2].

Muchas gracias


Como dije en los comentarios, NOT / IN no está bien optimizado por Jet / ACE y generalmente es más eficiente usar una UNIÓN EXTERNA. En este caso, debido a que necesita filtrar en el lado externo de la unión, necesitará una subconsulta:

INSERT INTO photos_by_celebrity ( ORIG_FILE_INDEX, celebrity_name ) SELECT tblOriginal_Files.ORIG_FILE_INDEX, ''Audrey Hepburn'' FROM tblOriginal_Files LEFT JOIN (SELECT DISTINCT ORIG_FILE_INDEX FROM photos_by_celebrity WHERE celebrity_name = ''Audrey Hepburn'') AS Photos ON tblOriginal_Files.ORIG_FILE_INDEX = Photos.ORIG_FILE_INDEX WHERE Photos.ORIG_FILE_INDEX Is Null;

(Puede que no sea exactamente correcto. Soy terrible con la escritura de SQL a mano, especialmente con la sintaxis de JOIN correcta)

Sin embargo, debo decir que me pregunto si esto insertará demasiados registros (y la misma reserva se aplica a la versión NOT IN).


En la pregunta original, modifiqué los nombres de mi tabla y campo e inserté corchetes para que fuera más fácil de leer.

A continuación se muestra la declaración SQL final que funcionó en formato MS Access. Increíble resultado, gracias de nuevo Tor !!

INSERT INTO photos_by_celebrity ( ORIG_FILE_INDEX, celebrity_name ) SELECT tblOriginal_Files.ORIG_FILE_INDEX, ''Audrey Hepburn'' AS Expr1 FROM tblOriginal_Files WHERE (((tblOriginal_Files.ORIG_FILE_INDEX) Not In (SELECT DISTINCT ORIG_FILE_INDEX FROM photos_by_celebrity WHERE celebrity_name = ''Audrey Hepburn'')) AND ((tblOriginal_Files.ORIGINAL_FILE) Like "*aud*"));