AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Was ist an diesem (Sub)query falsch?
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist an diesem (Sub)query falsch?

Ein Thema von Namenloser · begonnen am 14. Mai 2007 · letzter Beitrag vom 16. Mai 2007
Antwort Antwort
Seite 1 von 3  1 23      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:00
Datenbank: MySQL • Version: 4.1 • Zugriff über: PHP
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:
SELECT * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20)
Zur Erklärung: ID ist ein AutoInc-Wert.

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...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:02
SELECT v1.* FROM gb_verificationid v1, gb_verificationid v1 WHERE v1.id < (MAX(v2.id)-20);
Markus Kinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:06
Oder auch

SELECT * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20 FROM gb_verificationid) (ggf. in Delete ändern sollte nicht das Problem sein)

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:09
@mkinzler:
danke, aber leider funktioniert das nicht (#1066 - Not unique table/alias: 'v1' ). Außerdem muss ich mich korrigieren, eigentlich hätte es
Code:
DELETE * FROM gb_verificationid WHERE id <(SELECT MAX(id)-20)
heißen müssen.

@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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:11
das Problem beim Copy&Paste ist, daß man oft vergißt das eingefügte zu verändern:
SELECT v1.* FROM gb_verificationid v1, gb_verificationid v2 WHERE v1.id < (MAX(v2.id)-20);
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 18:20
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 20:03
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
Heiko
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 20:42
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...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 21:31
Lass doch mal den Prefix weg...

SQL-Code:
DELETE FROM gb_verificationid
WHERE id < (SELECT MAX(id) - 20
            FROM gb_verificationid)
Gruss
Thorsten
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Was ist an diesem (Sub)query falsch?

  Alt 14. Mai 2007, 21:34
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz