MySQL - Problemas con MYSQL ejercicio de SELECT

   
Vista:

Problemas con MYSQL ejercicio de SELECT

Publicado por jose (12 intervenciones) el 03/11/2013 11:36:23
Hola a todos,

Tengo que hacer un ejercicio que me esta dando problemas en mysql.

Teniendo tres tablas:
HOTEL (CodHot, nombre, direccion, ciudad, telefono, num_plazas, CodSuc)
ON {CodSuc} REFERENCIA SUCURSAL (CodSuc)

TURISTA (CodTur, nombre, apellidos, direecion, telefono, CodSuc)
ON {CodSuc} REFERENCIA SUCURSAL (CodSuc)

ALOJAMIENTO (CodTur, fecha_ini, CodHot, facha_salida, regimen)
ON {CodTur} REFERENCIA TURISTA (CodTur)
ON {CodHot} REFERENCIA HOTEL (CodHot)

El ejercicio dice que por cada por cada alojamiento contratado muestre los apellidos y nombres del turista en una columna seperada(ejemplo Sil Sil, Anotnio), nombre del hotel en mayusculas, fecha de inicio y el numero de dias que se ha alojado. Ordenado por nombre del hotel y despues por los apellidos.

select distinct t.CodTur, concat(t.cognoms,',',t.nom), UPPER(h.nom), a.data_ini, datediff (a.data_sortida,a.data_ini) as dies
from turista t,allotjament a,hotel h
where t.CodTur=a.CodTur
order by h.nom, t.cognoms;

Mi problema viene en que se repite muchas veces:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+--------+-----------------------------+--------------------+------------+------+
| CodTur | concat(t.cognoms,',',t.nom) | UPPER(h.nom)       | data_ini   | dies|
+--------+-----------------------------+--------------------+------------+------+
|      5 | Capdevila Sánchez,Laia      | GRAN HOTEL         | 2013-09-01 |   19|
|      4 | Comas Garcia,Laia           | GRAN HOTEL         | 2013-09-01 |    1|
|      4 | Comas Garcia,Laia           | GRAN HOTEL         | 2013-09-03 |    1|
|      4 | Comas Garcia,Laia           | GRAN HOTEL         | 2013-09-05 |    1|
|      4 | Comas Garcia,Laia           | GRAN HOTEL         | 2013-09-07 |    1|
|      1 | Miralles Garcia,Albert      | GRAN HOTEL         | 2013-09-01 |    2|
|      1 | Miralles Garcia,Albert      | GRAN HOTEL         | 2013-09-04 |    2|
|      1 | Miralles Garcia,Albert      | GRAN HOTEL         | 2013-09-07 |    3|
|      3 | Royo Royo,Josep Mª          | GRAN HOTEL         | 2013-09-01 |    3|
|      3 | Royo Royo,Josep Mª          | GRAN HOTEL         | 2013-09-06 |    4|
|      2 | Sánchez Pérez,Adrià         | GRAN HOTEL         | 2013-09-01 |    3|
|      2 | Sánchez Pérez,Adrià         | GRAN HOTEL         | 2013-09-07 |    4|
|      5 | Capdevila Sánchez,Laia      | HOTEL DIAGONAL MAR | 2013-09-01 |   19|
|      4 | Comas Garcia,Laia           | HOTEL DIAGONAL MAR | 2013-09-01 |    1|
|      4 | Comas Garcia,Laia           | HOTEL DIAGONAL MAR | 2013-09-03 |    1

y continua todos los turistas aparecen como si hubiesen estado en todos los hotesles.

Cuando si voy a la tabla de alojamiento me encuntro con esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> select * from allotjament;
+--------+------------+--------+--------------+-------------------+
| CodTur | data_ini   | CodHot | data_sortida | regim             |
+--------+------------+--------+--------------+-------------------+
|      1 | 2013-09-01 |    100 | 2013-09-03   | mitja pensió      |
|      1 | 2013-09-04 |    103 | 2013-09-06   | mitja pensió      |
|      1 | 2013-09-07 |    105 | 2013-09-10   | pensió complerta  |
|      2 | 2013-09-01 |    100 | 2013-09-04   | mitja pensió      |
|      2 | 2013-09-07 |    103 | 2013-09-11   | mitja pensió      |
|      3 | 2013-09-01 |    100 | 2013-09-04   | mitja pensió      |
|      3 | 2013-09-06 |    103 | 2013-09-10   | mitja pensió      |
|      4 | 2013-09-01 |    100 | 2013-09-02   | pensió complerta  |
|      4 | 2013-09-03 |    103 | 2013-09-04   | pensió complerta  |
|      4 | 2013-09-05 |    105 | 2013-09-06   | pensió complerta  |
|      4 | 2013-09-07 |    101 | 2013-09-08   | pensió complerta  |
|      5 | 2013-09-01 |    100 | 2013-09-20   | pensió complerta  |
+--------+------------+--------+--------------+-------------------+


Esta es la tabla entera de hotel
12 rows in set (0.00 sec)

1
2
3
4
5
6
7
8
9
10
+--------+--------------------+---------------+---------------+-----------+------------+--------+
| CodHot | nom                | adreca        | ciutat        | telefon   | num_places | CodSuc |
+--------+--------------------+---------------+---------------+-----------+------------+--------+
|    100 | Hotel Gran via     | Gran Via      | Barcelona     | 931234567 |   120      |    100 |
|    101 | Hotel Diagonal Mar | Diagonal      | Barcelona     | 932345678 |   100      |    100 |
|    102 | Gran Hotel         | C/ Mondragón  | Barcelona     | 933456789 |    90      |    100 |
|    103 | Gran Hotel         | C/ Llull      | Girona        | 934567890 |    60      |    101 |
|    104 | Hoteles Hilken     | C/ Llacuna    | Girona        | 935678901 |    30      |    101 |
|    105 | Gran Hotel         | C/ Bonavista  | Castelldefels | 936789012 |   120      |    101 |
+--------+--------------------+---------------+---------------+-----------+------------+--------+

A ver si alguien me puede ayudar gracias,
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
Imágen de perfil de xve

Problemas con MYSQL ejercicio de SELECT

Publicado por xve (899 intervenciones) el 03/11/2013 16:16:24
Hola Jose, creo que el problema esta en que no estas vinculando las tablas, por eso se repiten tanto los registros...

no se muy bien como están relacionadas las tablas, por lo que no se si te funcionara...:
1
2
3
4
SELECT t.CodTur, concat(t.cognoms,',',t.nom), UPPER(h.nom), a.data_ini, datediff (a.data_sortida,a.data_ini) as dies
FROM turista t LEFT JOIN allotjament a ON t.CodTur=a.CodTur
LEFT JOIN hotel h ON h.CodHot=a.CodHot
ORDER BY h.nom, t.cognoms;

Coméntanos, ok?
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

Problemas con MYSQL ejercicio de SELECT

Publicado por jose (12 intervenciones) el 10/11/2013 11:45:28
Hola xve,

Disculpa por no contestar antes, no habia recibido ningun email.

Yo al final lo solucione de esta manera:
SELECT concat(t.cognoms,',',t.nom), UPPER(h.nom), a.data_ini, datediff (a.data_sortida,a.data_ini) as dies FROM allotjament a INNER JOIN turista t ON t.CodTur=a.CodTur
INNER JOIN hotel h ON h.CodHot=a.CodHot
ORDER BY h.nom, t.cognoms;

El resultado es el mismo.

Muchisimas gracias Xve.
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