2017-05-21 7 views
0

Ich habe einen SQL-Code Rang auf der Rangliste von gewonnen Matches und dem gespielten Matches für die Berechnung:Warum dieser SQL-Code wirft Fehler

SELECT count(1) 
FROM `account` 
WHERE points < SELECT points FROM (SELECT `display name`, 3*`wins`-`matches played` AS points FROM `account`) AS T WHERE `display name` = "valaki" 

Der linke Teil der Ungleichheit funktioniert, wenn ich die Punkte für Siege ändern oder irgendein vorhandenes Feld, der linke Teil funktioniert genauso, aber der Code funktioniert nicht.

+0

Was ist die Fehlermeldung? –

Antwort

1

Sie müssen Klammern Subqueries um:

SELECT count(1) 
FROM account a 
WHERE a.points < (SELECT 3*a2.wins-a2.matchesplayed AS points 
        FROM account a2 
        WHERE a2.displayname = 'valaki' 
       ); 

Darüber hinaus werden Sie in den Spalten als matches played und diplay name verweisen. Das ist nicht richtig. Sie benötigen Escape-Zeichen um Spaltennamen mit Leerzeichen. Mein Rat ist, die Spaltennamen zu korrigieren, damit sie nicht maskiert werden müssen.

Ich habe auch Tabellen Aliase hinzugefügt. Das ist eine gute Angewohnheit. Sie sollten wirklich obligatorisch sein, wenn eine Abfrage mehr als eine Tabelle referenziert oder mehr als eine FROM Klausel enthält.

Verwandte Themen