none
Como guardar un select en una variable RRS feed

  • Pregunta

  • hola tengo el una duda quiero consultar y comparar los id repetidos de una tabla con una columna con valores parecidos e echo algo parecido pero me marca un error

    DECLARE @Id as INT

    SET @Id = (SELECT UnitId FROM SICOI_Unit WHERE ParentUnit=0)

    SELECT UnitId FROM SICOI_Unit WHERE ParentUnit= @Id

    este es el error

    Mens. 512, Nivel 16, Estado 1, Línea 3
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
     

    viernes, 10 de marzo de 2017 16:07

Respuestas

  • MIRIAM_ADRIANA,

    La subconsulta está retornando un conjunto de resultados, los mismos que no pueden "entrar" en una variable escalar. 

    Si buscas comparar un valor contra un conjunto de resultados una opción a considerar es el operador lógico IN, la evaluación resulta verdadera si algún valor coincide con los valores de la sub-consulta.

    SELECT 
        UnitId 
    FROM 
        SICOI_Unit 
    WHERE 
        ParentUnit IN (SELECT UnitId FROM SICOI_Unit WHERE ParentUnit = 0);
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 10 de marzo de 2017 16:19
  • La otra, si esa consulta solo esta devolviendo un resultado, puedes almacenarlo en la variable que comentas de esta manera:

    DECLARE @Id as INT
    SELECT @Id = UnitId FROM SICOI_Unit WHERE ParentUnit=0 
    SELECT UnitId FROM SICOI_Unit WHERE ParentUnit= @Id

    Aunque, obviamente, esto depende de que es lo que desees hacer. Ahora, si la aseveración anterior es correcta, creo que también lo puedes resolver de la siguiente manera:

    SELECT su1.UnitId 
    FROM SICOI_Unit su1
    INNER JOIN SICOI_Unit su2 ON su1.ParentUnit = su2.UnitId
    WHERE su2.ParentUnit= 0


    SERGIO SANCHEZ ARIAS
    facebook twitter blogger google


    viernes, 10 de marzo de 2017 16:45

Todas las respuestas

  • MIRIAM_ADRIANA,

    La subconsulta está retornando un conjunto de resultados, los mismos que no pueden "entrar" en una variable escalar. 

    Si buscas comparar un valor contra un conjunto de resultados una opción a considerar es el operador lógico IN, la evaluación resulta verdadera si algún valor coincide con los valores de la sub-consulta.

    SELECT 
        UnitId 
    FROM 
        SICOI_Unit 
    WHERE 
        ParentUnit IN (SELECT UnitId FROM SICOI_Unit WHERE ParentUnit = 0);
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 10 de marzo de 2017 16:19
  • La otra, si esa consulta solo esta devolviendo un resultado, puedes almacenarlo en la variable que comentas de esta manera:

    DECLARE @Id as INT
    SELECT @Id = UnitId FROM SICOI_Unit WHERE ParentUnit=0 
    SELECT UnitId FROM SICOI_Unit WHERE ParentUnit= @Id

    Aunque, obviamente, esto depende de que es lo que desees hacer. Ahora, si la aseveración anterior es correcta, creo que también lo puedes resolver de la siguiente manera:

    SELECT su1.UnitId 
    FROM SICOI_Unit su1
    INNER JOIN SICOI_Unit su2 ON su1.ParentUnit = su2.UnitId
    WHERE su2.ParentUnit= 0


    SERGIO SANCHEZ ARIAS
    facebook twitter blogger google


    viernes, 10 de marzo de 2017 16:45
  • Si lo que quieres es saber cuales son los ID que coinciden entre una columna y la otra, puedes hacer un INNER JOIN de la tabla consigo misma:

    SELECT * FROM SICOI_Unit AS a JOIN SICOI_Unit AS b on a.UnitId=b.ParentUnit

    viernes, 10 de marzo de 2017 16:54