none
hacer update con inner join en un solo campo RRS feed

  • Pregunta

  • update doncentes set (nombre_docente, fecha_nacimiento, email_docente, id_materia) select 'dario','15/7/1000','dario@gmail.com', materias.id_materia from materias inner join doncentes on doncentes.id_materia = materias.id_materia where doncentes.id_docente = 2


    es este codigo lo que trato de hacer es cuando me den el nombre de la materia ir a la tabla materia, y devolver el id de la materia para guardarlo en la tabla docentes, en el campo id_materia
    martes, 20 de marzo de 2018 23:10

Respuestas

  • Dice que le dan el nombre de la materia, y que el propósito de tal cosa es que usted consiga el ID de la materia.  Si entendí correctamente, su SQL no hace eso, además del hecho de que la sentencia UPDATE no utiliza una lista de columnas (eso es de la sentencia INSERT).

    Si usted necesita ubicar el ID por nombre de materia, puede hacerlo en una variable.  Luego de obtener dicho ID puede guardarlo en la tabla doncentes, pero para hacer eso necesita como mínimo saber en cuál o cuáles registros almacenará el valor.  Quiere decir que necesita al menos una pieza más de información.  ¿La tiene?

    Declare @nombreMateria nvarchar(100) = N'Materia a buscar';
    Declare @materiaId bigint;
    
    Select
        @materiaId = ID
    From
        materias
    Where
        Nombre = @nombreMateria
    ;
    
    If (@materiaId Is Not Null)
    Begin
        --Genial.  Sí encontramos un ID.
        Update
            docentes --Imagino que "doncentes" es un error
        Set
            id_materia = @materiaId
        Where
            --????  Aquí necesitamos la información adicional para saber cuál docente o docentes debo actualizar.
    End
    


    Jose R. MCP
    Code Samples

    miércoles, 21 de marzo de 2018 16:15

Todas las respuestas

  • Hola:

    No lo entiendo del todo. Te presento el escenario como lo veo y luego tu determinas si encaja.

    CREATE TABLE DOCENTES (ID_DOCENTE INT, ID_MATERIA INT, NOMBRE_DOCENTE VARCHAR(10), FECHA_NACIMIENTO DATE, EMAIL_DOCENTE VARCHAR(50))
    GO
    CREATE TABLE MATERIAS (ID_MATERIA INT, DESCRIPCION VARCHAR(50))
    GO
    
    INSERT INTO DOCENTES (ID_DOCENTE,ID_MATERIA,NOMBRE_DOCENTE,FECHA_NACIMIENTO,EMAIL_DOCENTE) 
    VALUES (1,1,'JUAN','20000301','ej@live.com'),
    (1,2,'ANA','19990405','ana@hotmail.com');
    INSERT INTO MATERIAS (ID_MATERIA,DESCRIPCION) VALUES (1,'ARTE'),(2,'GEO')
    --SENTENCIA DE UPDATEO EN FUNCIÓN DE DATO
    
    
    DECLARE @DESCRIPCION  INT; 
    set @DESCRIPCION = (SELECT ID_MATERIA FROM MATERIAS WHERE DESCRIPCION = 'GEOGRAFIA');
    SELECT @DESCRIPCION
    
    UPDATE DOCENTES 
    	SET ID_MATERIA = @DESCRIPCION 
    		FROM DOCENTES D INNER JOIN MATERIAS M ON D.ID_MATERIA = M.ID_MATERIA
    		WHERE 
    			 D.ID_DOCENTE = 1
    
    
    		select * from DOCENTES

    Supongo que lo que intentas hacer es una update con una tabla relacionada.La sintaxis puede ser igual que la que te he puesto, pero en el igual en vez de @Descripción puedes mencionar cualquier campo de las dos tablas.

    Un saludo

    miércoles, 21 de marzo de 2018 6:48
  • Dice que le dan el nombre de la materia, y que el propósito de tal cosa es que usted consiga el ID de la materia.  Si entendí correctamente, su SQL no hace eso, además del hecho de que la sentencia UPDATE no utiliza una lista de columnas (eso es de la sentencia INSERT).

    Si usted necesita ubicar el ID por nombre de materia, puede hacerlo en una variable.  Luego de obtener dicho ID puede guardarlo en la tabla doncentes, pero para hacer eso necesita como mínimo saber en cuál o cuáles registros almacenará el valor.  Quiere decir que necesita al menos una pieza más de información.  ¿La tiene?

    Declare @nombreMateria nvarchar(100) = N'Materia a buscar';
    Declare @materiaId bigint;
    
    Select
        @materiaId = ID
    From
        materias
    Where
        Nombre = @nombreMateria
    ;
    
    If (@materiaId Is Not Null)
    Begin
        --Genial.  Sí encontramos un ID.
        Update
            docentes --Imagino que "doncentes" es un error
        Set
            id_materia = @materiaId
        Where
            --????  Aquí necesitamos la información adicional para saber cuál docente o docentes debo actualizar.
    End
    


    Jose R. MCP
    Code Samples

    miércoles, 21 de marzo de 2018 16:15