none
Como Insertar por cada registro encontrado? RRS feed

  • Pregunta

  • Estoy utilizando SQL 2016.

    Tengo las siguientes tablas: 

    ID| Articulo

    1 | Pelota
    2 | Telefono

    ID | Imagenes

    1 | Pelota_1
    2 | Telefono_2
    3 | Telefono_3
    4 | Telefono_4

    Finalmente quiero una tabla resultado conectado los IDs de las dos tablas:

    Ejemplo:

    ID_Articulo | ID_Imagen

    1 | 1
    2 | 1
    2 | 2
    2 | 3
    2 | 4

    El proceso es el siguiente:

    Se inserta en la segunda tabla las imágenes, luego un único registro de Articulo. Finalmente se relacionarían por ID. 

    Que las une? Pues el nombre, ejemplo: "Teléfono".

    Entonces tengo mi select del id de imágen que coincide con mi nombre de Articulo:

    SELECT @Id_Img = Id from PCC.Archivos WHERE Nombre LIKE @Id_Relacion_Articulo_Archivo + '%'

    Pero esto me devuelve solo un registro. 

    Quiero realizar un while un registro es encontrado, insartar los ID en la tercera tabla:

    2 | 1

    2 | 2 

    2 | 3 

    Podrían darme algun ejemplo?

    lunes, 16 de diciembre de 2019 14:30

Respuestas

  • Hola Gaccerbo:

    Es parecido a lo que comentas, pero no del todo.

    create table articulos (id int PRIMARY KEY, descripcion varchar(15))
    go
    insert into articulos (id, descripcion)
    values
    (1,'Pelota'),
    (2,'Teléfono');
    go

    Esto igual, pero imágenes tiene una columna más.

    create table Imagenes (id int identity(1,1), idArticulo int, Descripcion varchar(15))
    go
    Insert into Imagenes(idArticulo, Descripcion)
    values
    (1,'Pelota_1'),
    (2,'Teléfono_2'),
    (2,'Teléfono_3'),
    (2,'Teléfono_4');
    go

    La columna idArticulo, que hace referencia a los registros de artículos. Adicionalmente esto se conoce como foreign key, de manera que los registros insertados en imágenes, estarán relacionados, con los registros en artículos.

    alter table imagenes
    add constraint fk_img_art foreign key (idarticulo) references articulos (id);
    

    Ahora todas las insercciones de imagenes, estarán ligadas a la tabla artículo por esa columna.

    Para poder obtener datos, puedes hacer esto.

    Select * from 
    articulos left join 
    Imagenes on articulos.id = Imagenes.idArticulo

    Asi obtienes todos los datos de articulo, y todos los datos de su tabla relacionada imágenes, tenga o no un artículo imagenes.

    Para dar la salida que quieres, solo tienes que cambiar el asterisco por los campos que necesitas.

    Por ejemplo:

    Select a.id, a.descripcion, I.id as ImagenId, i.Descripcion as Imagen from articulos a left join Imagenes i on a.id = i.idArticulo

    where a.id = 2


    En el where puedes utilizar cualquier columna de las dos tablas.

    lunes, 16 de diciembre de 2019 15:06
  • Deleted
    lunes, 16 de diciembre de 2019 20:40

Todas las respuestas

  • Hola Gaccerbo:

    Es parecido a lo que comentas, pero no del todo.

    create table articulos (id int PRIMARY KEY, descripcion varchar(15))
    go
    insert into articulos (id, descripcion)
    values
    (1,'Pelota'),
    (2,'Teléfono');
    go

    Esto igual, pero imágenes tiene una columna más.

    create table Imagenes (id int identity(1,1), idArticulo int, Descripcion varchar(15))
    go
    Insert into Imagenes(idArticulo, Descripcion)
    values
    (1,'Pelota_1'),
    (2,'Teléfono_2'),
    (2,'Teléfono_3'),
    (2,'Teléfono_4');
    go

    La columna idArticulo, que hace referencia a los registros de artículos. Adicionalmente esto se conoce como foreign key, de manera que los registros insertados en imágenes, estarán relacionados, con los registros en artículos.

    alter table imagenes
    add constraint fk_img_art foreign key (idarticulo) references articulos (id);
    

    Ahora todas las insercciones de imagenes, estarán ligadas a la tabla artículo por esa columna.

    Para poder obtener datos, puedes hacer esto.

    Select * from 
    articulos left join 
    Imagenes on articulos.id = Imagenes.idArticulo

    Asi obtienes todos los datos de articulo, y todos los datos de su tabla relacionada imágenes, tenga o no un artículo imagenes.

    Para dar la salida que quieres, solo tienes que cambiar el asterisco por los campos que necesitas.

    Por ejemplo:

    Select a.id, a.descripcion, I.id as ImagenId, i.Descripcion as Imagen from articulos a left join Imagenes i on a.id = i.idArticulo

    where a.id = 2


    En el where puedes utilizar cualquier columna de las dos tablas.

    lunes, 16 de diciembre de 2019 15:06
  • Deleted
    lunes, 16 de diciembre de 2019 20:40