2017-08-24 1 views
0

Ich habe eine sehr einfache AbfrageEinfache MySQL Query nicht läuft nicht auf dem Server

UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15) 

geschrieben haben, die ihre Arbeit erfolgreich auf meinem lokalen Rechner tut.

jedoch die gleiche Abfrage gibt folgende Fehler auf dem Server

MySQL server version for the right syntax to use near 'where remaining<15)' at line 1

Ich weiß, dass gleiche Abfrage auch als

geschrieben werden kann
UPDATE `product_variants` SET `remaining`= 15 WHERE remaining<15; 

aber ich mag die Syntaxfehler in dem ersten wissen Abfrage.

mysql --Version

mysql Ver 14.14 Distrib 5.5.52, for debian-linux-gnu (x86_64) using readline 6.3

Ubuntu Version

Linux ip-172-31-27-247 3.13.0-74-generiC#118-Ubuntu SMP Thu Dec 17 22:52:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

+0

Was Ihr Ergebnis ist, wenn Sie dies tun, nur auf dem Server, der nicht funktioniert? ID auswählen, wo übrig bleibt <15 –

+0

Es zeigt meine All-IDs an, deren Rest ist weniger als 15 – Cybersupernova

Antwort

1

Es ist nicht möglich gleiche Update-Tabelle in select-Anweisung in Unterabfrage zu verwenden, können Sie den Grund in diesem Link: Reason for not use same table in sub-query.

versuchen unter query:

SET @r_ids = (select GROUP_CONCAT(id) FROM product_variants where remaining <15); 
    /* set the result id's into the one variable. */ 
SELECT @r_ids; 
    /* If you want to check the variable value, use above statement. */ 
UPDATE product_variants SET remaining= 15 
WHERE id IN (@r_ids); 
    /* update that same id's which is find into the @r_ids. */ 

Sie können mehr über Variable hier in diesem Link finden. More about Variables.

Speichern Sie zunächst die IDs in die Variable einige und aktualisieren Sie dann diese IDs mit in Abfrage.

+0

Erzeugt gleichen Fehler wie oben – Cybersupernova

+0

Ja gleichen Fehler 'MySQL Server-Version für die richtige Syntax zu verwenden in der Nähe 'wo übrig <15)' in Zeile 1 ' – Cybersupernova

+0

Die Abfrage funktioniert, aber eine Erklärung ist erforderlich, um die Antwort zu akzeptieren. – Cybersupernova

1

UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15)

Zwei denkt:

  1. (select GROUP_CONCAT(id) where remaining<15) die Tabelle fehlt Ihnen von SELECT id FROM ... where remaining<15
  2. auswählen möchten Sie haben where id in statt where id = zu verwenden, da Ihre Abfrage mehrere Zeilen zurückgeben könnten.

sollte diese Arbeit:

UPDATE product_variants 
SET remaining= 15 
WHERE id IN 
     (SELECT id 
     FROM 
      (SELECT id 
       FROM product_variants 
       WHERE remaining<15) a) 
+0

Wirf gleichen Fehler – Cybersupernova

+0

* Genau * das Gleiche? –

+0

ja genau das gleiche – Cybersupernova