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.

Seleccionando una coincidencia entre múltiples filas en SQLite.

Digamos que tengo una tabla llamada food_prefs con amigos y sus comidas favoritas.

id name favorite_foods
1 Amy Pizza
2 Bob Pizza
3 Chad Caviar
4 Dana Pizza
5 Dana Ensalada

Entiendo cómo obtener los nombres de todos aquellos a quienes les gusta la pizza, pero no estoy seguro de cómo seleccionar a las personas que solo tienen “pizza” listada como su comida favorita. Es decir, de la tabla anterior, solo quiero seleccionar a Amy y Bob.

Además, sería genial tener una solución que también pueda seleccionar nombres con múltiples favoritos (por ejemplo, en otra consulta, seleccionar a todos aquellos que tienen “pizza y ensalada” como sus favoritas, lo cual incluiría a los que solo les gusta la pizza o solo les gusta la ensalada, excepto Chad en este ejemplo).

(Me parece que la documentación de sqlite no es muy clara, ¡así que disculpen si esta pregunta parece muy simple!)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar a las personas que solo tienen “pizza” como su comida favorita, puedes usar la siguiente consulta SQL:

    SELECT name FROM food_prefs WHERE favorite_foods = 'Pizza' GROUP BY name HAVING COUNT(*) = 1;
    

    Esta consulta primero filtra las filas donde favorite_foods es igual a “Pizza”, luego agrupa las filas restantes por name. La cláusula HAVING COUNT(*) = 1 asegura que solo se devuelvan aquellos grupos de name donde solo queda una fila después del filtrado.

    Para seleccionar a todos aquellos que tienen “pizza y ensalada” como su favorito, puedes usar la siguiente consulta:

    SELECT name FROM food_prefs WHERE favorite_foods IN ('Pizza', 'Salad')
    GROUP BY name HAVING COUNT(DISTINCT favorite_foods) = 2;
    

    Esta consulta filtra las filas donde favorite_foods es ‘Pizza’ o ‘Salad’, agrupa las filas restantes por name, y luego asegura que solo se devuelvan aquellos grupos donde haya exactamente dos valores distintos de favorite_foods.

    Para también devolver a las personas que solo tienen un favorito que aparece en esa lista, puedes modificar la consulta anterior de la siguiente manera:

    SELECT name FROM food_prefs WHERE favorite_foods IN ('Pizza', 'Salad')
    GROUP BY name HAVING COUNT(DISTINCT favorite_foods) >= 1;
    

    Esta consulta asegura que solo se devuelvan aquellos grupos donde haya al menos una fila después del filtrado.

    ¡Espero que esto te ayude!

Comments are closed.