2017-09-02 7 views
0

Ich habe gesucht, aber keine Lösungen gefunden, die in meiner Instanz funktionieren.mySQL - Löschen von Zeilen in einer Tabelle mit Innerem Join

mySQL db mit 2 Tabellen. Verwenden von Ergebnissen aus Tabelle b, um Zeilen in Tabelle a zu identifizieren, die gelöscht werden sollen.

Wenn ich diese Abfrage ausführen es ergibt sich aus Tabelle a zurückgibt.

SELECT a.* FROM forteweb_vhatest.siteind_frm_item_metas a 
INNER JOIN (
      SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas 
      WHERE field_id = 122 
      AND ExpiryDate < now() 
      )b ON a.item_id = b.item_id ; 

Ich erhalte eine Fehlermeldung, wenn ich versuche, diese Datensätze löschen mit

DELETE a.* FROM forteweb_vhatest.siteind_frm_item_metas a 
INNER JOIN (
      SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas 
      WHERE field_id = 122 
      AND ExpiryDate < now() 
      )b ON a.item_id = b.item_id ; 

Können Sie mir, warum sagen?

Vielen Dank.

+0

1. Entfernen Sie '. *'. – Strawberry

Antwort

0
SELECT a.* FROM forteweb_vhatest.siteind_frm_item_metas a 
INNER JOIN (
     SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas 
     WHERE field_id = 122 
     AND ExpiryDate < now() 
     )b ON a.item_id = b.item_id ; 

/* Added Tabelle alias nach DELETE */

DELETE a FROM forteweb_vhatest.siteind_frm_item_metas a 
    INNER JOIN (
      SELECT item_id FROM forteweb_vhatest.siteind_frm_item_metas 
      WHERE field_id = 122 
      AND ExpiryDate < now() 
      )b ON a.item_id = b.item_id ; 
+0

Hallo Ravi. Das sieht korrekt aus, löst aber einen Fehler in MySQL Workbench aus. 'Fehlercode: 1064. Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht verwenden in der Nähe von ‚ein INNER JOIN (SELECT item_id FROM forteweb_vhatest.siteind_frm_item_met‘ at line 1 'Aber kann sagen, dass ich die SELECT-Anweisung funktioniert. –

+0

ich nur kopiert Ihre select Abfrage. Wie ich sehe, dass Sie Aliasing „b“ für die zweite Tabelle verwenden, aber Sie haben die Tabellennamen in der Abfrage nicht verwendet. –

+0

Dank Ravi, es funktioniert jetzt. die nächste, was ist das für mich mit CRON zu planen. Onwards Wir gehen! :) Prost. –

0

Sie sollten a.* aus der delete Anweisung entfernen, weil delete Argumente nach dem delete nicht Schlüsselwort akzeptieren.

Es löscht alles, was aus der Abfrage angegeben nach dem Tabellennamen zurückgegeben. Wenn hinter dem Tabellennamen nichts angegeben ist, werden alle Datensätze gelöscht.

Sie können die Syntax der delete Anweisung here überprüfen.

Hoffe dies klärt Ihre Zweifel :)

+0

Löschen akzeptiert Argumente nach dem Schlüsselwort; nur nicht * das * Argument – Strawberry

+0

Oh..yeah. Lies es einfach online von [dieser Seite] (https://www.techonthenet.com/mysql/delete.php), aber gemäß diesem akzeptiert es nur 3 Argumente. Und was erwarten Sie bei der Codeabfrage in 'a. *'? –

+0

Vielleicht ist hier noch etwas anderes los. Selbst dieser einfache Befehl schlägt fehl. DELETE FROM forteweb_vhatest.siteind_frm_item_metas einer WHERE a.item_id = 28161; 'Ich Privilegien für diesen Benutzer in cPanel und sie haben alle PRIVILEGIEN überprüft haben. –

Verwandte Themen