2016-04-16 15 views
-2

So würde ich gerne den Spieler mit der meisten Erfahrung anzeigen, zuerst wollte ich alle Spieler und experiencepoints anzeigen dann versuchen und nur die max. so her der Code für beiden Tabellen und die Abfrage selbstSQL Join - Query Fehler

CREATE TABLE Player  
( 
    Player_ID INTEGER CONSTRAINT pk_player PRIMARY KEY,  
    Pname VARCHAR(60), 
    DOB VARCHAR(10),  
    Heightcm NUMBER(10),  
    Weightkg NUMBER(10),  
    Position VARCHAR(20),  
    Team_ID INTEGER CONSTRAINT fk_player REFERENCES Team(Team_ID) 
) 

CREATE TABLE PlayerCareer_Performance 
( 
    Player_Performance_ID INTEGER CONSTRAINT pk_PP PRIMARY KEY,  
    Player_ID INTEGER,  
    total_points NUMBER(10),  
    total_fouls NUMBER(10),  
    ExperiencePoints NUMBER(10),  
    CONSTRAINT fk_Pp FOREIGN KEY (Player_ID) REFERENCES Player(Player_ID) 
) 

Das ist der Tabellencode, unten ist die Abfrage:

SELECT PLAYER.PLAYER_ID,PLAYER.PNAME,PLAYERCAREER_PERFORMANCE.EXPERIENCEPOINTS  
FROM PLAYER  
JOIN PLAYERCAREER_PERFOMANCE  
ON PLAYERPERFROMANCE.PLAYER_ID = PLAYER.PLAYER_ID; 

Spieler auf gelb unterstrichen werden, und es sagt: „Ist vom Rest getrennt von beitreten graph "

Irgendwelche Ideen, irgendjemand? Ich kann nicht einen Fix sehen es

Antwort

0

Verwendung :(eine innere Verknüpfung (aktualisiert großen Nachfrage Rechnung zu tragen):

select p.player_id, p.pname, pcp.experiencepoiuts 
from Player p 
inner join PlayerCareer_Performance pcp on pcp.player_id = p.player_id 
+0

Sie schreiben 'verwenden Sie einen inneren Join', aber Ihre Abfrage hat keinen' inneren Join', Sie sollten sich entscheiden :-) – Jcl

+0

Entschuldigung, ich nahm an, dass das Standardverhalten von SQL (die meisten Engines) zu verstehen ist innere Verbindung. – yk11

+0

Ja, es wird wahrscheinlicher einen inneren Join geben, nur über die Antwort Redaction (nicht dass es falsch ist :-)) – Jcl

1

Auf den ersten Blick Sie schließen sich dem Tisch PLAYERCAREER_PERFORMANCE sondern auf einem Feld der Tabelle Beitritt genannt . PLAYERPERFROMANCE(sic) Ist das ein Tippfehler

Dies:

SELECT Player.Player_ID, Player.Pname, PlayerCareer_Performance.ExperiencePoints 
FROM Player 
JOIN PlayerCareer_Performance 
ON PlayerCareer_Performance.Player_ID = Player.Player_ID 

scheint gut zu funktionieren (nur korrigiert den Tippfehler): check it at sqlfiddle.

Als allgemeinen Vorschlag, halten Sie Ihren Code konsistent ... Sie verwenden verschiedene Spaltenformate (zB: ExperiencePoints vs total_points), und stellen Sie alle SQL-Abfrage-Code in Großbuchstaben, die nur schwer zu lesen und Tippfehler zu finden macht

+1

+10 Persönlich finde ich die SQL leichter zu entziffern, wenn den Tabellenreferenzen kurze Tabellenaliase zugewiesen werden (zB "p" für Spieler und "c" für playercareer_performance) und dann * alle * Spaltenreferenzen mit den Aliasen qualifizieren bevorzuge auch alle Kleinbuchstaben für Bezeichner. (Das ist nur meine persönliche Vorliebe. Nichts davon ist tatsächlich erforderlich *, andere Muster werden erfolgreich verwendet.) – spencer7593

+0

Ich benutze auch die kurzen Aliase, wollte einfach nicht die OPs Antwort ändern zu viel ... habe nur eine "anständige" Formatierung geliefert und wollte den Tippfehler aufzeigen, da die Abfrage ohne sie nicht falsch aussieht :-) Formatierte auch die Frage, wenn man den Bearbeitungsverlauf überprüft, sieht man seinen " Formatierung "bevor ich es repariere :-) – Jcl

+0

DU GOTT! Danke und es war der Tippfehler :(Ich muss wirklich aufhören, das zu tun, ja es kürzer zu machen wäre eine gute Idee, werde versuchen, nur den Spieler mit den meisten Experincepoints jetzt anzuzeigen, wenn ich morgen wieder krank Post kämpfe, danke Mann :) –