Estoy comenzando con SQL y PostgreSQL y tengo esta pregunta:
¿Cómo puedo obtener todos los elementos de un grupo donde solo algunos cumplen una condición?
Por ejemplo:
+________________________+
|id| group_id | name |
+------------------------+
| 1| 1 | FOOD |
--------------------------
| 2| 1 | SNACK |
--------------------------
| 3| 2 | SODA |
--------------------------
| 4| 1 |CHOCOLATE |
--------------------------
SELECT id FROM table WHERE any in group_id name LIKE 'FOOD%'
Me gustaría recuperar 1,2,4 ya que pertenecen a group_id donde uno de los elementos es LIKE 'FOOD%'.
No puedo recuperarlos a través de group_id ya que tengo diferentes bases de datos donde cambia group_id, y a veces el group_id de mi interés es 1,2... Lo único que es igual en todas las BD es el hecho de que estoy interesado en el group_id donde el nombre LIKE 'FOOD%'.
Dado que parece que las respuestas dadas resolvieron exitosamente su problema, acepte una. Aceptar la respuesta ayudará a futuros interrogadores que tengan el mismo problema. Por favor, no deje activa una pregunta con una respuesta satisfactoria.
Asegurador
28/03/2021 a las 22:40
------------------------------------
Puedes obtener todos los group_ids que necesitas en los resultados con:
SELECT group_id FROM tablename WHERE name LIKE 'FOOD%'
Utilízalo en tu consulta con el operador IN:
SELECT *
FROM tablename
WHERE group_id IN (SELECT group_id FROM tablename WHERE name LIKE 'FOOD%')
0
------------------------------------
Puedes utilizar existe:
select t.*
from t
where exits (select 1
from t t2
where t2.group_id = t.group_id and t2.name like 'FOOD%'
);
También te puede resultar conveniente combinar todos los alimentos en una sola fila por grupo:
select group_id,
array_agg(name order by name)
from t
group by group_id
having count(*) filter (where name like 'FOOD%') > 0;