SQL - Tablas temporales

 
Vista:
sin imagen de perfil

Tablas temporales

Publicado por Francisco (2 intervenciones) el 02/11/2011 11:49:55
Soy novato ene sto de sql asi que no estoy muy puesto, estoy con una base de datos de peliculas, clientes y alquiler y quiero hacer una consulta que me diga quien alquila mas.
Hago esto SELECT DNI_CLIENTE,COUNT(*) FROM ALQUILER GROUP BY DNI_CLIENTE; que me da el numero de alquileres totales; Hago la relacion
SELECT CLIENTES.NOMBRE FROM CLIENTES INNER JOIN (ALQUILER INNER JOIN PELICU
LAS ON PELICULAS.COD_PELICULA=ALQUILER.CODIGO_PELICULA) ON LQUILER.DNI_CLIENTE=
CLIENTES.DNI_CLIENTE;
Y me falta saber el maximo el cual sacaria de la primera consulta pero creo que eso se hace mejor con una tabla temporal, ¿alguien me puede decir como se hace una abla temporal a traves de la select de arriba? o una solucion mejor si la sabeis, uso oracle 11g.

Gracias a todos.
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

Tablas temporales

Publicado por Francisco (2 intervenciones) el 04/11/2011 10:52:23
hago esto pero no me funciona:
SELECT CLIENTES.NOMBRE FROM CLIENTES INNER JOIN (ALQUILER INNER JOIN PELICULAS ON PELICULAS.COD_PELICULA=ALQUILER.CODIGO_PELICULA) ON ALQUILER.DNI_CLIENTE=CLIENTES.DNI_CLIENTE WHERE ALQUILER.DNI_CLIENTE=(SELECT DNI_CLIENTE FROM (SELECT DNI_CLIENTE, COUNT(DNI_CLIENTE) INTO TEMPORAL FROM ALQUILER GROUP BY DNI_CLIENTE) WHERE COUNT(TEMPORAL.DNI_CLIENTE)=(SELECT MAX(DNI_CLIENTE) FROM TEMPORAL GROUP BY COUNT(TEMPORAL.DNI_CLIENTE));
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

Tablas temporales

Publicado por leonardo_josue (1173 intervenciones) el 04/11/2011 16:34:20
Hola Francisco, creo que deberías comenzar por decirnos qué BD estás utilizando, pues la sintaxis suele variar mucho entre los distintos motores. También sería conveniente que nos pusieras algunos datos de ejemplo de tus tablas, así podríamos tener un escenario más cercano a la realidad, de tal forma que será más fácil tratar de ayudarte.

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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Tablas temporales

Publicado por leonardo_josue (1173 intervenciones) el 04/11/2011 16:53:56
Perdón Francisco... ahora me doy cuenta que si mencionas que utilizas oracle 11... mira sin datos es difícil poder darte una respuesta puntual, pero se me ocurre que hagas algo como esto:

1
2
3
4
5
6
7
8
9
SELECT CLIENTES.NOMBRE FROM CLIENTES
INNER JOIN ALQUILER ON ALQUILER.DNI_CLIENTE = CLIENTES.DNI_CLIENTE
INNER JOIN PELICULAS ON PELICULAS.COD_PELICULA=ALQUILER.CODIGO_PELICULA
INNER JOIN (
SELECT DNI_CLIENTE FROM ARQUILER GROUP BY DBI_CLIENTE
HAVING COUNT(*) =
(SELECT MAX(COUNT(*)) TOTAL
FROM ARQUILER GROUP BY DNI_CLIENTE)
) TEMP ON TEMP.DNI_CLIENTE = CLIENTES.DNI_CLIENTE


Si observas la sobconsulta interna

1
2
3
4
SELECT DNI_CLIENTE FROM ARQUILER GROUP BY DBI_CLIENTE
HAVING COUNT(*) =
(SELECT MAX(COUNT(*)) TOTAL
FROM ARQUILER GROUP BY DNI_CLIENTE)


Esta de debería dar aquellos clientes que tienen más rentas (puede ser uno o más), por lo que sólo se incluirían como un INNER JOIN extra. También eliminé los paréntesis en los INNER JOINS, ya que la forma en que los haces resulta bastante confusa y se aplica sólo en ACCESS, el resultado debería ser el mismo.

Prueba la consulta, y si continuas con problemas entonces pon algunos datos de ejemplo de tus tablas para seguir pensando en alguna consulta que te sirva.

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