2016-12-22 5 views
2

Problem: Ich versuche eine Abfrage in SQLite erstellen, die alle Spalten (Stats) für eine bestimmte 'ID' in Tabelle1 anzeigen und es mit zwei separaten Ergebnissen aus Tabelle2 verbinden .Unerwünschte doppelte Tabellenergebnisse beim Zusammenführen von zwei Tabellen in SQLite

Wenn ein JOIN oder ein linker JOIN, ende I mit folgendem Ergebnis up: (TABLE1-Statistik) + (TABLE2 skill1) + (TABLE1-Statistik) + (TABLE2 skill2)

Tabelle 1 zweimal dupliziert weil es in TABLE2 zwei Fähigkeiten gibt. Wenn es 5 Fähigkeiten gäbe, würde ich TABLE1 wie oben beschrieben fünfmal duplizieren.

Was ich will, ist: (TABLE1 Statistiken) + (TABLE2 SKILL1Bonus) + (TABLE2 SKILL2Bonus)

Tabelle 1 steht für eine Kategorie eines Zeichens mit dem Schlüssel 'id'. Jeder Charakter hat eine unterschiedliche Anzahl an Fähigkeiten. Jedes Qualifikationsmerkmal ist definiert als (table2.skillID). Die Anzahl der Fähigkeitsmerkmale, die ein Charakter haben kann, ist bis zu 15. Ich versuche eine Abfrage zusammenzustellen, die die Basisstatistik des Charakters (table1. *) Mit all ihren Boni aus ihren Fähigkeiten (table2.bonus)

zeigt

Beispiel

-- Table 1 -- 
id = 8 
strength = 12 
agility = 11 

... mehr Statistiken

-- Table 2 -- 
id = 8 
skillID = 3 
bonus = 20% chance to dodge 

id = 8 
skillID = 4 
bonus = 5% chance to crit 

die nächstgelegene ich bekommen habe, und was hat mir das obige Ergebnis bekommen:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.id = table2.id 
WHERE table1.id = 8; 

Jede Hilfe auf der Richtung, die ich gehen sollte, würde sehr geschätzt werden. Ich bin mir nicht sicher, ob Unterabfragen eine bessere Route wären. Vielen Dank!

+0

Was passiert, wenn in table2 mehr als zwei Zeilen mit derselben ID vorhanden sind? Setzen Sie einige Regeln und erwartete Ausgabe * Daten * in der Frage – GurV

+0

gibt es Duplikate der 'ID' in Tabelle2 von Entwurf. Die 'ID' repräsentiert eine Kategorie von Charakteren. Es ist der Primärschlüssel in Tabelle1 und der Fremdschlüssel in Tabelle2. – dubba

+0

Was ich suche, ist alles von table1 (wo ID = 8) zusammen mit beiden Fähigkeiten aus Tabelle 2 angezeigt werden (wo ID = 8) – dubba

Antwort

0
select 
    t1.id, 
    t1.strength, 
    t1.agility, 
    group_concat(t2.skill,',') bonuses 
from table1 t1 
left outer join 
table2 t2 
on t1.id = t2.id 
where t1.id = 8 
group by 
    t1.id, 
    t1.strength, 
    t1.agility; 
+0

@dubba funktioniert das für Sie? – GurV

+0

Danke für die schnelle Rückmeldung. Das ist viel näher an dem, was ich will. Ich werde die Frage aktualisieren. Es kann beliebig viele Fähigkeiten geben (bis zu 15). Der minimale, maximale Ansatz funktioniert hier nur für zwei (wie du schon sagtest). Aktualisieren Sie jetzt ... – dubba

+0

Sie nicht 15 Spalten für das (oder mehr für diese Angelegenheit) erstellen möchten. Behalte jeden Skill in einer separaten Reihe. – GurV

Verwandte Themen