Alejandro González Reyes
Para los que no entendieron el contexto va de nuevo:
Tenemos un archivo CVS con la siguiente información
El laberinto de la Soledad | Octavio Paz | 1955 Vuelta al laberinto de la Soledad | Octavio Paz | 1960
Mediante un script de PHP podemos obtener estos datos e ir iterando para las insercciones, pero el problema surge en que nuestra tabla de books tenemos solo el title y el year, el nombre del autor lo tenemos en otra tabla llamada authors.
Ahora
Supongamos que insertamos un libro, pero como el autor es de tipo integer
por referencia lógica a la tabla authors, en un primer momento tenemos que hacer un select a la tabla authors, fijarse que id tiene el autor en cuestión y regresar a insertar el registro
INSERT INTO books (title, author_id) VALUES ('El laberinto de la Soledad', 6);
Sin embargo al usar INSERT con SELECT anidados, podemos saltarnos el paso de hacer el select previo a la tabla de autores y colocarlo internamente en la consulta de insercción
Para el campo author_id, su valor lo obtengo de una subconsulta, de ahí que este entre parentesis, para que se haga primero
INSERT INTO books (title, author_id, year) VALUES ('Vuelta al laberinto de la Soledad', (SELECT author_id FROM authors WHERE name = 'Octavio Paz'), 1960);
aHORA si , todo esto dentro de un bucle y problema solucionado
Alejandro González Reyes
JUAN SEBASTIAN RODRIGUEZ JIMENEZ
QUE BUEN APORTE COMPAÑERO !!
Angel de Jesus Quintero Pereira
11- Inserción de datos usando querys anidados
LIMIT 1; Esta sentencia limita sólo traer la primera ocurrencia. Esa sentencia sumamente importante cuando decidimos traer un registro.
Los sub-querys normalmente tienen una notación On una función exponencial.Los sub-querys pueden tardar sé demasiado y también puede insertar datos erróneos en el caso de los insert anidados.
Se puede realizar insert de datos haciéndolo de forma anidada con un SELECT Ejemplo tenemos lo siguientes registro para hacer un insert anidado
Edith Giselle Lopez Lopez
Gracias por tu aporte
Daniel Andrés Giraldo Benites
gracias por tu aporte
Edwin Alfredo mejia pinto
Mis apuntes:
La utilización de los select anidados son muy útiles pero con riesgo de afectar las tuplas que no corresponda .
Analizar primero los valores de las tuplas a insertar , usar las condicionales con los valores correctos y limitar a que solo traiga un registro.
Recordar que lo que esta dentro de los (paréntesis) es lo primero que ejecuta y luego pasa al insert.
Ademas esta forma de select anidado retarda el tiempo , consume mas memoria y puede afectar la BDs (en el caso que aun no termine la operación y el sistema caiga )
Daniel Andrés Giraldo Benites
exacto tener cuidado del riesgo que aveces implica usar un select anidado y también considerar el tiempo extra que tomará dicho procesamiento
Jasan Azael Hernández Bautista
La carnita del curso, el SELCT!!
Bayes
jaja
Daniel Andrés Giraldo Benites
SELECT es el dios de los queries
Luis Miguel Gutierrez Ramirez
Ejemplo de consultas anidadas:
INSERT INTO books(title, author_id, `year`) VALUES('Vueltra al laberinto de la soledad', (SELECT author_id FROM authors where name = 'Octavio Paz' LIMIT 1 ) );
Maria Lopez
Al ejecutar esta consulta falla, este es el error que retorna mysql Column count doesn't match value count at row 1 falto poner el valor para el campo year.
Nicolas Rocha
Resumen de la Clase: Tips:
Código de la clase:
/* Clase 11 */ /* Insertamos a mano */ INSERT INTO books(title, author_id) VALUES('El laberinto de la Soledad', 6); /* Insertamos con select */ INSERT INTO books(title, author_id, `year`) VALUES('Vuelta al Laberinto de la Soledad', (SELECT author_id FROM authors WHERE name = 'Octavio Paz' LIMIT 1), 1960);
Daniel Andrés Giraldo Benites
gracias por tu resumen
Royer Guerrero Pinilla
El comando SELECT es el uno de los más importantes si no el más importantes nos permite pedirle información de las tablas 💾➡➡➡📖
Edith Giselle Lopez Lopez
Estoy muy de acuerdo con lo que dices
Abraham Manuel Munguia Coronado
pedir los datos , la informacion se construye manipulando los datos
Angela Mariela Crespo Herreras
\G = Display result vertically.
Reinaldo Mendoza
No encontraba como llamarlo, grazzie
Marcelo Javier Pedernera
Me parece que la manera que afecta al rendimiento en cuanto al tiempo le quita atractivo.
Facundo Nicolás García Martoni
ProfesorAsí es Marcelo, lo recomendable siempre es evitar los querys anidados. Pueden realizarse de manera casual, pero si se pretende que esa consulta escale definitivamente es una mala idea.
Luis Alfredo Villalta López
INSERT INTO books(title, author_id) VALUES('El Laberinto de la Soledad',6); INSERT INTO books(title, author_id, year) VALUES('Vuelta al Laberinto de la Soledad', (SELECT author_id FROM authors WHERE name = 'Octavio Paz' LIMIT 1 ),1960 );```
Cesar A Rivera O
Una forma de consulta anidada mas clara que suelo utilizar para crear datos de pruebas en mis bases de datos es la siguiente:
INSERT INTO books(title, author_id, `year`) SELECT 'Vueltra al laberinto de la soledad', author_id, 1960 FROM authors WHERE name = 'Octavio Paz' LIMIT 1;
Adrian Peralta
También uso eso, es muy bueno.
Usuario anónimo
UserBuena la alternativa.
juan esteban gañan
en la nueva version de MYSQL el year lo reconoce por defecto como campo, por lo que no hay que poner el year como texto como sale en el video 'year'.
INSERT INTO pruebaplatzi.books(title, author_id, year) VALUES ('OTRO LIBRO DE PRUEBA x3', (SELECT author_id FROM pruebaplatzi.authors WHERE name = 'sam altman' LIMIT 1 ) ,1960);
Roberto Arturo
Por lo que entiendo hasta ahora lo recomendado es que los id se generen desde la misma tabla mientras que los queries anidados no sean a ese nivel.
Samuel Rojas Rojas
Que tipo de brujeria fue ese INSERT? jajajaja
Angel de Jesus Quintero Pereira
LIMIT 1; Esta sentencia limita sólo traer la primera ocurrencia. Esa sentencia sumamente importante cuando decidimos traer un registro
Pedro Luis Romano Mansilla
Esto es muy útil cuando se necesita hacer una precarga de datos para que arranque la aplicación que utilizará la BD, pero como dices SE DEBE USAR CON CUIDADO, por experiencia me ha pasado que he mezclado todos los datos por no hacerlo bien.
Pedro Ramón Sánchez Chacón
Para los que no colocaron DEFAULT 1900 en la columna year de la tabla books
ALTER TABLE books MODIFY COLUMN `year` INTEGER UNSIGNED DEFAULT 1900 NOT NULL;
Fernando Huamán Santamaria
My interesanto los subqueries pero también hay que tener mucho cuidado.
Martín Leyva
Inserción de datos usando querys anidados
El plural de query en inglés es queries
Luis Andrés Arce Cárdenas
Siempre es aconsejable, ejecutar antes el select para ver si realmente es lo que espero obtener y luego pasar ese select como subconsulta o consulta anidada.