2012-05-23 21 views
18

Czy ktoś wie, w jaki sposób mogę wykonać wewnętrzne sprzężenia i aliasy wartości, aby nie nadpisywać się nawzajem? To może wyglądać bardziej jasne, czy widzisz moją kod: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 

SOLVED (Po pomoc poniżej tutaj jest moja ostateczna zapytań)

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 

Odpowiedz

28

Musisz dołączyć dwukrotnie:

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

Użyj kolumnę oddzielna wskazać warunki złączenia

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

Hej, to jest fajne - ale próbuję umieścić zarówno "dom" i "z dala" w tym samym rzędzie. Wiem, że moje pytanie nie miało zbytniego sensu. :) To działa, jeśli chcę mieć osobny rekord domu/rzędu. – JREAM