SQL - SQL Filtrar Consulta con Columnas de otra Tabla

 
Vista:

SQL Filtrar Consulta con Columnas de otra Tabla

Publicado por Fernando (2 intervenciones) el 14/06/2011 00:13:05
Hola a todos.

Os planteo una duda que tengo para poder filtrar el listado de una tabla.

Las tablas que han de intervenir son:

------------------- -------------------
| USUARIO | | ASISTENCIA|
=========== ===========
| idUsuario | | idAsistencia |
| idCCAA | | idUsuario |
------------------- -------------------

Pongo solo esas columnas ya que las demás son irrelevantes.

El caso es que me gustaría poder listar aquellos usuarios de la tabla Asistencia que cumplan el requisito de un idCCAA de la tabla Usuarios determinado.

Estoy probando la siguiente sentencia pero nada, no funciona. Os la dejo igualmente por si os sirve para comprender que es lo que pretendo:

SELECT * FROM Asistencia group by idUsuario having idusuario=(select idUsuario FROM Usuario where idCCAA=3);

Os doy las gracias desde ya!

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

SQL Filtrar Consulta con Columnas de otra Tabla

Publicado por Leonardo Josué (1173 intervenciones) el 14/06/2011 16:18:27
Hola Fernando... A falta de datos no puedo probar la consulta, pero espero que te pueda ayudar. Hay varias formas en que pudieras abordar este problema, la restricción que pones es correcta, pero creo que en lugar de ponerla en el HAVING deberías ponerla en el WHERE:

1
2
3
4
SELECT * FROM Asistencia
WHERE
idusuario = (select idUsuario FROM Usuario where idCCAA=3)
group by idUsuario


Ahora bien, para poder utilizar la condición con igual (=) es necesario que la consulta te regrese UN SOLO REGISTRO, es decir que en la tabla USUARIOS no debe de haber más de un registro con idCCAA = 3. Si este fuera el caso debes utilizar una sentencia IN en lugar del signo (=).

En lo particular cuando hago una consulta trato de no incluir subconsultas en las mismas, ya que estas sueles ser muy tardadas. también tengo mis dudas si en realidad necesitas hacer un GROUP BY, sobre todo porque estás haciendo un select * , prueba esta consulta para ver si te arroja los resultados que quieres.

1
2
3
4
SELECT A.* FROM Asistencia A
INNER JOIN USUARIO U ON A.idUsuario = U.idUsuario
WHERE
U.idCCAA=3


Si ninguna de estas consultas te sirve te pido que por favor incluyas algunos datos de tus tablas para poder hacer algunas pruebas.

Saludos.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SQL Filtrar Consulta con Columnas de otra Tabla

Publicado por Fernando (3 intervenciones) el 14/06/2011 17:33:02
Gracias Leo!! Era con el inner join.

Podrías recomendarme alguna lectura para poder comprender mejor los inner, lef, right.. joins ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

SQL Filtrar Consulta con Columnas de otra Tabla

Publicado por Leonardo Josué (1173 intervenciones) el 15/06/2011 16:52:40
Puedes pedirle ayuda a santa WIKIPEDIA, creo que explica de manera bastante sencilla pero completa el uso de cada uno de los diferentes tipos de JOIN:

http://es.wikipedia.org/wiki/Join

O san GOOGLE también te puede aportar algunos tips... creo que el tema de los JOIN's no es muy dificil, es cuestión de que identifiques cómo funciona cada uno de ellos y que hagas pruebas en tu BD. Finalmente, cualquier manual de SQL para principiantes de podría servir, ya que este es un concepto básico para poder hacer consultas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar