Seite 1 von 1

sqlite join

Verfasst: Mittwoch 20. April 2011, 19:01
von Lonestar
Nabend,
das ist zwar kein Spezielles Python- Problem, sondern eher ein SQL-Problem. Ich verwende sqlite3. Nehmen wir an ich habe 2 Tabellen:

Code: Alles auswählen

CREATE TABLE "teams" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "name" TEXT)

CREATE TABLE "games" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "id_team_home" INTEGER,
    "id_team_guest" INTEGER,
    "complete" INTEGER)
Nun möchte ich eine Abfrage machen mit der ich gleich die Namen zu den Teams mitgeliefert bekomme die in der Tabelle `games` referenziert werden. Das sähe für `id_team_home` beispielsweise so aus:

Code: Alles auswählen

 
SELECT games.id_play_day, teams.name AS home, teams.name AS home
   FROM games INNER JOIN teams ON
     teams.id = games.id_team_home
WHERE games.complete = 0
meine Frage wäre nun: Wie bekomme ich den Namen für `id_team_guest` direkt mitgeliefert? Ich könnte ja noch einen JOIN machen, aber woher weiss ich auf welche `teams.id` der angewendet wird? Ist das so einfach überhaupt möglich, oder muss ich das beim erstellen der Datenbank als FK angeben und die Abfrage völlig anders stellen?

Re: sqlite join

Verfasst: Mittwoch 20. April 2011, 19:20
von /me
Standard-SQL dafür sähe beispielsweise so aus:

Code: Alles auswählen

SELECT 
    games.id_play_day, 
    teams_home.name AS name_home, 
    teams_guest.name AS name_guest
  FROM 
    games 
  JOIN teams teams_home ON
    teams_home.id = games.id_team_home
  JOIN teams teams_guest ON
    teams_guest.id = games.id_team_guest
  WHERE 
    games.complete = 0

Re: sqlite join

Verfasst: Mittwoch 20. April 2011, 19:20
von BlackJack
@Lonestar: Du müsstest zweimal mit `teams` "joinen", der Tabelle dabei aber jeweils (oder mindestens einmal) ein Alias verpassen, damit man die auseinander halten kann. Ungetestet:

Code: Alles auswählen

select games.id, t1.name as home, t2.name as guest
from games
join teams t1 on t1.id = games.id_team_home
join teams t2 on t2.id = games.id_team_guest
;

Re: sqlite join

Verfasst: Mittwoch 20. April 2011, 19:34
von Lonestar
Danke,
der Tabelle nen Alias verpassen hatte ich mir schon vermutet, aber kein Beispiel im Netz gefunden (ist immer so ein Problem wenn man nicht weiß wonach man sucht :roll: ). Auf die Idee wäre ich jetzt aber nicht gekommen das ich den Alias für den select auch verwenden darf bevor ich das Alias überhaupt definiert habe.
Da habe ich doch mal wieder was dazugelernt.

Danke euch beiden
Sebastian