2016-05-01 5 views
-1

noch in dem Griff SQL bekommen, aber diese Nähte wie ein ziemlich grundlegendes Problem im offensichtlich etwas fehlt großeSQL-Anweisung Fehler Basis

SELECT * FROM myTable WHERE arbitraryInt < (SELECT MAX(arbitraryInt)); 

ich keine Zeilen zurückgegeben, wenn ich für eine Tatsache wissen, dass es arbitraryInt Werte, die sind kleiner als die max. Es gibt keinen Fehler obwohl nichts zurückgegeben wurde. Vielen Dank im Voraus

Update: Das ist der Rest des Codes, die immer noch einen Fehler bekommt mit Schlüsselwort FROM

UPDATE myTable SET arbitraryInt = arbitraryInt + 1 
WHERE primaryKey = 0001 AND arbitraryInt < (
    SELECT MAX(arbitraryInt) FROM myTable 
); 

erhalte ich die Fehler myTable angebene wird zweimal

Der Kontext versucht im machen Elemente können manuell sortiert werden, indem für jedes Element eine ganze Sortierreihenfolge verwendet wird. Der Grund für MAX besteht also darin, diese ganze Zahl nicht größer als nötig zu machen. Ich bin sicher, es gibt einen besseren Weg, dies zu tun, aber ich habe es noch nicht gesehen. Das Ergebnis, nach dem ich suche, ist eine Tabelle mit Pfeilen nach oben und nach unten, um Listenelemente für einen Online-Shop zu sortieren.

+0

Es scheint mir seltsam, dass Sie einen ausgewählten Cursor aktualisieren können. Das könnte dein Problem sein. – Sebas

+0

Wenn Sie so sortieren, werden Sie am Ende einen 'arbitraryInt'-Wert inkrementieren, so dass er mit 'MAX (arbitraryInt)' übereinstimmt und schließlich werden alle gleich dem 'MAX()' sein. Ich denke, Sie sollten zulassen, dass der ganzzahlige Wert größer wird. Eine ganze Zahl wird Ihnen mehr als 2 Milliarden Zahlen geben. – user212514

Antwort

0

Eine Unterabfrage muss eine vollständige Abfrage sein, die eigenständig ausgeführt werden kann. Ihre Unterabfrage

(SELECT MAX(arbitraryInt)) 

ist nicht vollständig, da es keine FROM Klausel angeben wird. Ihre vollständige Abfrage sollte wohl so etwas wie

SELECT * 
    FROM myTable 
    WHERE arbitraryInt < (SELECT MAX(arbitraryInt) 
          FROM myTable); 
+0

Danke, das hat diesen Teil der Abfrage behoben .. Im Kontext habe ich jetzt UPDATE myTable SET arbitraryInt = arbitraryInt + 1 WHERE primaryKey = 0001 UND arbitraryInt <(SELECT MAX (arbitraryInt) FROM myTable); Ich bekomme den Fehler myTable ist zweimal verkündet – Felix

0

Du eine from Klausel fehlt, so vermutlich beabsichtigen Sie:

SELECT * 
FROM myTable 
WHERE arbitraryInt < (SELECT MAX(arbitraryInt) FROM mytable); 
0

Dies hat Funktion in Stack-Überlauf vor. Sehen Sie sich MYSQL update with WHERE SELECT subquery error

an
The following code seems to be something like what you are asking for 
/* 
CREATE TABLE MYTABLE (PRIMARYKEY INT, ARBITRARYID INT, AB1 INt) 
*/ 

truncate table MYTABLE; 
INSERT INTO MYTABLE 
VALUES (1,1,NULL),(1,2,NULL),(1,3,NULL); 

update MYTABLE 
set  ARBITRARYID = ARBITRARYID + 1 
where PRIMARYKEY = 1 and 
     ARBITRARYID <= (
     SELECT MAXABID FROM 
     (
     select max(ARBITRARYID) MAXABID FROM MYTABLE 
     ) S 
     ) 
; 
select * from MYTABLE