entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Consulta SQL

Tengo un problema que me esta quemando la cabeza al intentar resolver este query:

La consulta debe retornar todos los datos de la tabla A, que contengan registros relacionados de la tabla B, y los registros de esta tabla B no deben existir en la tabla C, o si existen, que contentan al menos uno de los campos habilitados en FALSE:

Aqui la estructura aproximada de las tablas:

Tabla A:

ID -------- nombre ---------fecha_inicio

Tabla B:

ID-------ID_tablaA---------Habilitado

Tabla C:
ID--------ID_tablaB------Habilitado------Fecha_inicio-----Hora_inicio

Para hacerlo mas dificil, luego esta consulta debo implementarla en HQL.

Lo mas aproximado que estuve, fue con los siguientes intentos:

select distinct a.* from tabla1 a inner join tabla2 b on a.id = b.id_tablaA where 1=1 and b.id not in(select c.id_tabla2 from tabla3 c) or b.id in (select c.id_tabla2 from tabla3 c where c.habilitado=0)

o con esta otra

select distinct a from tabla1 a inner join tabla2 b on a.id=b.id_tablaA left join tabla3 c on b.id=c.id_tabla2 where b.id not in (select d.id_tabla2 from tabla3 d where d.habilitado=1)

Graciassss!!!!

1 Respuesta

1voto

Andhii1293 Puntos2930

suponiendo que tu columna Habilitado contenga solo VERDADERO(1) o FALSO(0) la primera consulta debería funcionar, solo la modificaria para que quede de la siguiente manera:

SELECT DISTINCT 
a.* 
FROM tabla1 a 
INNER JOIN tabla2 b ON a.id = b.id_tablaA 
WHERE 1=1 
AND b.id NOT IN(select c.id_tabla2 from tabla3 c where habilitado = 1)

De esta manera mostrara los de tabla A que estén en la B que a su vez estos no se encuentren en la tabla C habilitados (VERDADERO).

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta