es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrar con SQL Server por ID de Grupo

Tengo dos tablas y necesito filtrar los datos por el id del filtro que depende de la relación con el id del grupo de filtros.

Por ejemplo, tengo estas dos tablas:

Tabla 1:

ItemID FilterID
3 122
3 123
3 4
17 123

Tabla 2:

FilterID FilterGroupID
122 5
123 5
4 1

Si busco por el id del filtro = 123, entonces se deben devolver todos los ids de elementos con este filtro. Si busco dos o más filtros diferentes que tienen diferentes ids de grupos, necesito obtener solo los ids de elementos que tengan todos los ids de filtro y de grupo.

Resultado deseado:

  • Primer input: 123 -> devuelve item id = 3 y item id = 17
  • Segundo input: 123,4 -> devuelve item id = 3 porque el id del filtro 123 pertenece al id del grupo 5 y el id del filtro 4 pertenece al id del grupo 1 y el item id 3 es el único que tiene estos dos filtros.
  • Tercer input: 122,123 -> devuelve item id = 3 y item id = 17 porque ambos id de filtro pertenecen al mismo grupo.

Me estoy perdiendo un poco con esta consulta y estaré contento de recibir algo de ayuda.

Intentaré simplificarlo: Digamos que tenemos un grupo de filtro de tamaño y un grupo de filtro de color. Si filtro por tamaño S o M, entonces necesito obtener todos los elementos con estos tamaños. Si quiero agregar color como azul, entonces la respuesta cortará el resultado por: elemento con tamaño S o M y color azul. Por lo tanto, el filtro de diferentes grupos puede reducir algunos resultados.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para filtrar los datos por el id de filtro dependiendo de la relación con el id de grupo de filtro, puedes utilizar una subconsulta en la cláusula WHERE.

    La subconsulta unirá las dos tablas por el id de filtro y el id de grupo de filtro, y devolverá los ids de grupo de filtro distintos que coincidan con los ids de filtro pasados. Esta subconsulta luego se utilizará para filtrar los ids de los elementos que tienen todos los ids de filtro y sus correspondientes ids de grupo de filtro.

    Aquí hay un ejemplo de consulta para la segunda entrada (id de filtro = 123,4):

    SELECT T1.ItemID
    FROM Table1 T1
    WHERE T1.FilterID IN (123,4)
    AND (
        SELECT COUNT(DISTINCT T2.FilterGroupID)
        FROM Table2 T2
        WHERE T2.FilterID IN (123,4)
        AND T2.FilterGroupID = T1.FilterGroupID
    ) = 2
    GROUP BY T1.ItemID
    HAVING COUNT(*) = 2;
    

    En esta consulta, estamos seleccionando los ids de los elementos de la Tabla1 donde el id de filtro es 123 o 4. Luego estamos utilizando una subconsulta para contar el número de ids de grupo de filtro distintos que coinciden con los ids de filtro pasados. Comprobamos si este recuento es igual al número de filtros pasados (en este caso, el recuento debe ser 2 ya que pasamos 123 y 4). Esto significa que el elemento tiene todos los filtros y sus correspondientes ids de grupo de filtro. Finalmente, estamos agrupando por id de elemento y utilizando la cláusula HAVING para filtrar los elementos que no tienen ambos ids de filtro.

    Puedes modificar esta consulta según tus requisitos específicos y los filtros de entrada.

Comments are closed.