2012-05-23 17 views
18

Qualcuno sa come posso fare un inner join e valori alias all'interno in modo che non si sovrascrivano l'un l'altro? Potrebbe sembrare più chiaro se si vede il mio codice: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 

RISOLTO (Dopo l'aiuto di seguito ecco la mia domanda finale)

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 

risposta

28

Avrai bisogno di unire due volte:

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

utilizzare una colonna separata per indicare la condizione di join

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

Ehi, è bello, ma sto cercando di mettere "casa" e "via" nella stessa fila. So che la mia domanda non ha molto senso. :) Funziona se voglio un record di casa/riga separato. – JREAM