Error en Consulta triple con alias en myslq

Tengo una web de deportes que tiene que visualizar los torneos y que partidos que se juegan a diario con los nombres de jugadores y resultados, con la siguiente estructura:

Players
ID_P - player's ID
NAME_P - player's name

Tours
ID_T - ID
NAME_T - name

Odds
ID1_O - id of first player
ID2_O - id of second player
ID_T_O - tour's id
K1 - K1 odds
K2 - K2 odds
TOTAL - total

Esta es mi consulta :

SELECT nombre1.*, tours_atp.*, odds_atp.* FROM odds_atp LEFT JOIN players_atp AS nombre1 ON (players_atp.ID_P = odds_atp.ID1_O) LEFT JOIN players_atp AS nombre2 ON (players_atp.ID_P = odds_atp.ID2_O) LEFT JOIN tours_atp ON ( tours_atp.ID_T= odds_atp.ID_T_O ) WHERE tours_atp.rank_t=3 OR tours_atp.rank_t=4 OR tours_atp.rank_t=5 ORDER BY tours_atp.rank_t ASC

Pero me da este error : Unknown column 'players_atp. ID_P' in 'on clause'

¿Cuál es el fallo?

1 Respuesta

Respuesta
1

Te respondo muy, muy rápido, es posible que tenga un error en la respuesta, en ese caso me lo indicas y lo vemos con más detenimiento.

No veo que en tu consulta indiques en ningún lado que players_atp corresponde a la tabla players. Tampoco veo que indiques que odds_atp corresponde a odds ni que tours_atp corresponde a tours.

En cambio, veo que quieres usar <strong style="line-height: 1.5em;">nombre1 como alias de <strong style="line-height: 1.5em;">players_atp. Pero este último no está definido. Allí es donde dejo de entender la consulta, al menos mentalmente.

El alias se define así: (veo que ya lo sabes, pero posiblemente olvidaste hacerlo)

SELECT nombre1.*, tours_atp.*, odds_atp.* FROM odds AS odds_atp LEFT JOIN players AS  players_atp ...

Te he tenido que responder muy rápido esta vez, si no te soluciona el problema, empezamos de nuevo el fin de semana.

Perdona no había escrito bien los nombres de las tablas en la estructura:

Players_atp
ID_P - player's ID
NAME_P - player's name

Tours_atp
ID_T - ID
NAME_T - name

Odds_atp
ID1_O - id of first player
ID2_O - id of second player
ID_T_O - tour's id
K1 - K1 odds
K2 - K2 odds
TOTAL - total

Los alias los necesito porque tengo que visualizar los nombres de 2 jugadores que están jugando en este momento,los que juegan ahora aparecen en la tabla odds_atp por eso tengo que leer los ids (id1_O , id2_O) de esta tabla y los comparo con id_p de la tabla players_atp para poder visualizar esos nombres.

Necesito ayuda urgentemente, nadie encuentra una solución a mi problema

Tal vez luego de especificar un alias para players_atp debieras usar ese alias.

SELECT nombre1.*, tours_atp.*,
odds_atp.*
FROM odds_atp LEFT JOIN players_atp
AS nombre1 ON (nombre1.ID_P = odds_atp.ID1_O) LEFT JOIN players_atp AS nombre2 ON
(nombre2.ID_P = odds_atp.ID2_O) LEFT JOIN tours_atp ON ( tours_atp.ID_T= odds_atp.ID_T_O )
WHERE tours_atp.rank_t=3 OR tours_atp.rank_t=4 OR tours_atp.rank_t=5
ORDER BY tours_atp.rank_t ASC

Prueba con eso y si no funciona, avísame enseguida y continuamos.

Gracias por la respuesta, me ha ayudado mucho , ahora tengo que modificar la consulta y añadir una tabla mas, como tendría que definirla para que no me de error tours_atp y la reconozca.

me la este error Unknown table 'tours_atp'

SELECT nombre1. * , tours_atp. * , odds_atp. * , today_atp. * , name_t
FROM today_atp
LEFT JOIN players_atp AS nombre1 ON ( nombre1.ID_P = today_atp.ID1 )
LEFT JOIN players_atp AS nombre2 ON ( nombre2.ID_P = today_atp.ID2 )
LEFT JOIN odds_atp ON ( today_atp.tour = odds_atp.ID_T_O )
WHERE tours_atp.rank_t =3
OR tours_atp.rank_t =4
OR tours_atp.rank_t =5
ORDER BY tours_atp.rank_t ASC
LIMIT 0 , 30

Gracias

Soniaam:

Primero, en SELECT el campo name_t no está calificado por un alias. ¿A qué tabla pertenece?

Si es a nombre1, tours_atp, odds_atp o today_atp, ya ha sido leído (debido a que el asterisco te trajo todos los campos de las tablas) Si no pertenece a ninguna tabla, tendrás un error porque no indicas de dónde lo quieres tomar.

Luego, tours_atp no está mencionada en FROM.

Podría ser así:

<span class="pln">FROM tours_atp</span><span class="pun">,</span><span class="pln"> today_atp</span>
<span class="pln">LEFT JOIN players_atp AS nombre1 ON </span><span class="pun">(</span><span class="pln"> nombre1</span><span class="pun">.</span><span class="pln">ID_P </span><span class="pun">=</span><span class="pln"> today_atp</span><span class="pun">.</span><span class="pln">ID1 </span><span class="pun">)</span>
<span class="pln">LEFT JOIN players_atp AS nombre2 ON </span><span class="pun">(</span><span class="pln"> nombre2</span><span class="pun">.</span><span class="pln">ID_P </span><span class="pun">=</span><span class="pln"> today_atp</span><span class="pun">.</span><span class="pln">ID2 </span><span class="pun">)</span>
<span class="pln">LEFT JOIN odds_atp ON </span><span class="pun">(</span><span class="pln"> today_atp</span><span class="pun">.</span><span class="pln">tour </span><span class="pun">=</span><span class="pln"> odds_atp</span><span class="pun">.</span><span class="pln">ID_T_O </span><span class="pun">)</span>

Podría funcionar o necesitar más ajustes, según la relación que haya entre tours_atp y las demás tablas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas