![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: PHP
Was ist an diesem (Sub)query falsch?
Hallo, Community!
Ich hab auch mal wieder ein Problem, diesmal aber nicht in Delphi. Und zwar beschäftige ich mich jetzt seit kurzem mit MySQL und brauche jetzt ein Subquery. Im Prinzip geht es darum, dass ich eine Tabelle habe, in der maximal 20 Reihen stehen sollen. Ich dachte, das würde mit diesem Query gehen, tut es aber nicht (Fehler gibt es keinen):
Code:
Zur Erklärung: ID ist ein AutoInc-Wert.
SELECT * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20)
Hab schon Google und alles gequält aber nichts hilfreiches gefunden (In meinem Buch sind Subqueries leider ziemlich schlecht erklärt). Ich hoffe, mir kann jemand helfen! edit: das erste select sollte eigentlich ein delete sein... |
Re: Was ist an diesem (Sub)query falsch?
SQL-Code:
SELECT v1.* FROM gb_verificationid v1, gb_verificationid v1 WHERE v1.id < (MAX(v2.id)-20);
|
Re: Was ist an diesem (Sub)query falsch?
Oder auch
SQL-Code:
(ggf. in Delete ändern sollte nicht das Problem sein)
SELECT * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20 FROM gb_verificationid)
Gruß Der Unwissende |
Re: Was ist an diesem (Sub)query falsch?
@mkinzler:
danke, aber leider funktioniert das nicht (#1066 - Not unique table/alias: 'v1' ). Außerdem muss ich mich korrigieren, eigentlich hätte es
Code:
heißen müssen.
DELETE * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20)
@der_unwissende: der code funktioniert besser, aber der code wird komischerweise so ausgewertet, als ob es SELECT * FROM gb_verificationid WHERE id =(SELECT MAX(id)-20 FROM gb_verificationid) geheißen hätte. |
Re: Was ist an diesem (Sub)query falsch?
das Problem beim Copy&Paste ist, daß man oft vergißt das eingefügte zu verändern:
SQL-Code:
SELECT v1.* FROM gb_verificationid v1, gb_verificationid v2 WHERE v1.id < (MAX(v2.id)-20);
|
Re: Was ist an diesem (Sub)query falsch?
Wenn ich den Code so nehme wir er da steht bekomme ich "#1111 - Invalid use of group function"
Muss ich daran noch etwas ändern? Wenn ja, was? Tut mir Leid, ich steig durch Subqueries einfach nicht durch :cry: |
Re: Was ist an diesem (Sub)query falsch?
Hallo,
SELECT * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20) hier fehlt was. du musst in dem SubSelect schon eine komplette Abfrage schreiben Bei dir fehlt das From Ausserdem würde ich mit Table-Alias arbeiten (gb1 und gb2)
SQL-Code:
SELECT gb1.* FROM gb_verificationid gb1 WHERE gb1.id <
(SELECT MAX(gb2.id)-20 FROM gb_verificationid gb2) Heiko |
Re: Was ist an diesem (Sub)query falsch?
Vielen dank schon mal, der Code funktioniert fürs select wunderbar. Aber leider lässt sich das select wohl nicht einfach durch delete austauschen: "1093 - You can't specify target table 'gb_verificationid' for update in FROM clause "
Warum muss das bloß so kompliziert sein... |
Re: Was ist an diesem (Sub)query falsch?
Lass doch mal den Prefix weg...
SQL-Code:
Gruss
DELETE FROM gb_verificationid
WHERE id < (SELECT MAX(id) - 20 FROM gb_verificationid) Thorsten |
Re: Was ist an diesem (Sub)query falsch?
Da passiert leider das gleiche. Aber langsam frage ich mich, ob das bisschen performance so viel mühe überhaupt wert ist, schließlich hat es ohne subquery mit zwei einzelabfragen auch geklappt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz