none
Seleccionar registros usando dos ids de otras tablas relacionadas. RRS feed

  • Pregunta

  • Hola.  Tengo una aplicación ya desarrollada con una base de datos de access. Una tabla DESCRIPCIÓN DE ACTIVIDADES está relacionada con OBJETIVOS Y CON ACTIVIDADES (IDOBJETIVOS/IDACTIVIDADES). Necesito seleccionar registros de la tabla DESCRIPCION DE ACTIVIDADES, usando ACTIVIDADES y también OBJETIVOS.  Es decir, quiero seleccionar la descripcion de actividades que pertenezca a la actividad X, pero al mismo tiempo seleccionar descripcion de actividades que pertenezcan al objetivo Y. Lo intentando pero no he podido resolver esto que parece una tonteria.
    • Cambiado Enrique M. Montejo martes, 28 de febrero de 2017 18:48 Pregunta relacionada con el acceso a datos con Access.
    domingo, 26 de febrero de 2017 4:01

Todas las respuestas

  • Praxedes1462,

    ¿No basta con conectar dos expresiones mediante el operador lógico OR? Cada expresión define el filtro para el valor de la columna de referencia , por ejemplo:

    SELECT * FROM DESCRIPCION_DE_ACTIVIDADES
    WHERE (IDOBJETIVOS = 1) OR (IDACTIVIDADES = 2);
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 26 de febrero de 2017 4:39
  • Gracias por contestar.  Te lo agradezco mucho.  Este proyecto es para mi muy importante.  No soy muy bueno con el SQL. Y sé que el asunto tiene que ver con consultas.  Voy a tratar de ser más explícito. Tengo una tabla OBJETIVOS, una tabla ACTIVIDADES y una tercera tabla DESCRIPCIÓN DE ACTIVIDADES.   Esta tercera tabla ("DESCRIPCIÓN DE ACTIVIDADES") tiene registros que se identifican con un objetivo (X) y tambien algunos de esos registros se identifican con la actividad (Y). La tabla "DESCRIPCIÓN DE ACTIVIDADES", por lo tanto, tiene  su propio ID autonumérico, su IDBJETIVOS y su IDACTIVIDADES, además de la columna donde van los registros. Lo que la aplicación debe hacer es lo siguiente: "El usuario escoge una actividad, digamos "MURAL", pero también debe escoger un OBJETIVO para esa actividad. Así que DESCRIPCIÓN DE ACTIVIDAD se diferencia por el OBJETIVO Y POR LA ACTIVIDAD COMO TAL.  Los registros que haga en DESCRIPCIÓN DE ACTIVIDAD son de la actividad TAL y del objetivo TAL.

    TENGO UN BINDINGSOURCE QUE ME OFRECE DATOS DE OBJETIVOS Y UN COMBOBOX (CONECTADO A OTRO BINDING) QUE ME DA ACTIVIDADES. LO QUE NECESITO ES RECUPERAR Y GUARDAR DATOS DE LA SIGUIENTE MANERA:

    Selecciono actividad MURAL, digamos, y selecciono un objetivo (X), la descripción que haga de la actividad es exclusiva de ese objetivo.  Y luego esa misma actividad (Mural) va a tener una descripcion diferente cuando cambie de objetivo, digamos (Y). Asi que la actividad MURAL debe tener descripciones diferentes para objetivos diferentes.

    El punto de partida debe ser una consulta como esta:

    SELECT        [Descripción Actividad].Id, [Descripción Actividad].Desc_Actv, [Descripción Actividad].IDACTIVIDAD, [Descripción Actividad].IDOBJETIVO
    FROM            (([Descripción Actividad] INNER JOIN
                             Actividades ON [Descripción Actividad].IDACTIVIDAD = Actividades.Id) INNER JOIN
                             Objetivos ON [Descripción Actividad].IDOBJETIVO = Objetivos.Id)

    Pero donde surge la mayor dificultad es en aplicar el filtro deseado de manera tal que SELECCIONO ACTIVIDAD (MURAL) CON EL COMBOBOX Y ME APARECEN TODAS LAS "DESCRIPCIONES" Y AL ESCOGER EL OBJETIVO SÓLO ME APAREZCAN LAS "DESCRIPCIONES" DE ACTIVIDAD MURAL QUE CORRESPONDAN AL OBJETIVO SELECCIONADO.

    Debe ser un filtro que me permita recuperar la informacion segun ese criterio y tambien guardarla.

    Sorry si he sido muy prolijo, pero creo que así se me puede ayudar mejor.

    domingo, 26 de febrero de 2017 17:41
  • Praxedes1462,

    Espero haberte entendido:

    DECLARE @IDACTIVIDAD int = 1 /*Colocar un valos válido*/
    DECLARE @IDOBJETIVO int = NULL 
    
    SELECT        
        da.Id, 
        da.Desc_Actv, 
        da.IDACTIVIDAD, 
        da.IDOBJETIVO
    FROM            
        [Descripción Actividad] da
    WHERE
        (da.IDACTIVIDAD = @IDACTIVIDAD OR @IDACTIVIDAD IS NULL)
        AND (da.IDOBJETIVO = @IDOBJETIVO OR @IDOBJETIVO IS NULL)
    GO

    En caso no sea lo que esperas, lo simple es que adjuntes las estructuras de las tablas en mención y datos de prueba (en forma de CREATE TABLE e INSERT INTO) y en base a los datos indiques el resultado que esperas.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Propuesto como respuesta Joyce_AC lunes, 27 de febrero de 2017 15:23
    domingo, 26 de febrero de 2017 18:45