2012-05-23 22 views
18

¿Alguien sabe cómo puedo hacer uniones internas y valores de alias dentro para que no se sobrescriban entre sí? Podría parecer más clara si ves mi código:MySQL INNER JOIN Alias ​​

SELECT home, away, g.network, g.date_start 
    FROM game g 
    INNER JOIN team t ON (
     (t.importid = g.home) as home 
     OR 
     (t.importid = g.away) as away 
    ) 
    ORDER BY date_start DESC 
    LIMIT 7 

SOLUCIONADO (Después de la ayuda más adelante aquí está mi consulta final)

SELECT 
     home.market AS home_market, 
     away.market AS away_market, 
     g.network, 
     g.date_start 

    FROM game AS g 
    INNER JOIN team AS home ON (
     home.importid = g.home 
    ) 
    INNER JOIN team AS away ON (
     away.importid = g.away 
    ) 

    ORDER BY g.date_start DESC 
    LIMIT 7 

Respuesta

28

tendrá que unirse a dos veces:

SELECT home.*, away.*, g.network, g.date_start 
FROM game AS g 
INNER JOIN team AS home 
    ON home.importid = g.home 
INNER JOIN team AS away 
    ON away.importid = g.away 
ORDER BY g.date_start DESC 
LIMIT 7 
1

usar una columna separada para indicar la condición de unión

SELECT t.importid, 
     case 
      when t.importid = g.home 
      then 'home' 
      else 'away' 
     end as join_condition, 
     g.network, 
     g.date_start 
FROM game g 
INNER JOIN team t ON (t.importid = g.home OR t.importid = g.away) 
ORDER BY date_start DESC 
LIMIT 7 
+0

Oye, eso es genial, pero trato de ubicar tanto 'casa' como 'lejos' en la misma fila. Sé que mi pregunta no tiene demasiado sentido. :) Esto funciona si quiero un registro de inicio/fila separado. – JREAM