2012-03-29 12 views
-2

ich willJeder leitet Tabelle muss eine eigenen Alias ​​in mysql hat

Delete from IPADDRESS 
where visitdate Not in (
    SELECT visitdate FROM (
    SELECT visitdate FROM IPADDRESS 
    WHERE USERNAME='MGSH0002' ORDER BY visitdate DESC) 
    where ROWNUM < 4) and 
USERNAME='MGSH0002' 
+0

meine problm noch ungelöst ist plz mir helfen, wie diese Abfrage in meinem SQL ausführen können "Delete von IPADDRESS wo visitdate Nicht in (SELECT visitdate VON (SELECT visitdate VON IPADDRESS WHERE USERNAME = 'MGSH0002' ORDER VON visitdate DESC) wo ROWNUM <4) und USERNAME = 'MGSH0002' " – manorma

+0

Nein, vergiss meine vorherigen Kommentare. Die Fragen sind nicht gleich, ähnlich, aber nicht gleich. –

Antwort

1

alle Datensätze außer max 3 auf grundlegende von visitdate löschen Umschreiben Code mit einiger (jeder) Formatierung und das Problem wird noch deutlicher sein. Es hilft MySQL auch, einen Fehler zu liefern, der Ihnen mehr helfen kann (zB: error in line 8: ...).

Delete from IPADDRESS 
where visitdate Not in 
     (SELECT visitdate 
     FROM 
      (SELECT visitdate    --- this is 
      FROM IPADDRESS     --- the 
      WHERE USERNAME='MGSH0002'  --- derived 
      ORDER BY visitdate DESC   --- table 
     ) x       --- alias `x` added 
     where ROWNUM < 4 
    ) 
    and USERNAME='MGSH0002' 

Aber ich glaube nicht, dass MySQL ROWNUM hat. Sind Sie sicher, dass dies für MySQL und nicht für Oracle ist? Weil MySQL einige Einschränkungen für DELETE hat und die zu löschende Tabelle in WHERE referenziert. Man könnte so etwas wie verwenden:

DELETE i 
FROM 
     IpAddress AS i 
    CROSS JOIN 
     (SELECT visitdate 
     FROM IpAddress 
     WHERE username = 'MGSH0002' 
     ORDER BY visitdate DESC 
     LIMIT 1 OFFSET 2 
    ) AS tmp 
WHERE i.username = 'MGSH0002' 
    AND i.visitdate < tmp.visitdate 
+0

thnk u 4 ans .. aber nicht rumning in mysql..ich habe Fehler unkown "colum'ROWNUM 'in where-Klausel" gibt es keine Alternative für RONUM in mysql – manorma

+0

thnks jetzt seine Arbeit :) – manorma

0

Haben Sie versucht jeder Unterabfrage einen Aliasnamen geben, wie

Delete from IPADDRESS 
where visitdate Not in (
    SELECT visitdate FROM (
    SELECT visitdate FROM IPADDRESS 
    WHERE USERNAME='MGSH0002' ORDER BY visitdate DESC) as ip_address 
    where ROWNUM < 4) as ip_address_ordered and 
USERNAME='MGSH0002' 
+0

ja aber "ROWNUM" nicht arbeite in mysql sonst ist die Abfrage in Ordnung – manorma

Verwandte Themen