INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

MIN-Abfrage bei SQL-Zeilen-Update



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.02.2007, 16:05
Beitrag #1

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
MIN-Abfrage bei SQL-Zeilen-Update
Hallo,

dies hat zwar nicht direkt was mit LabVIEW zu tun, ich hoffe aber, daß es unter Euch jemanden gibt, der mir weiterhelfen kann, weil ja auch ein paar Leutchen das SQL-Toolkit nutzen.

Meine Tabelle besteht aus 3 Spalten: eine mit der Zeilen-ID (Autoincrement), eine mit einem String (Seriennummer) und eine mit einer zweiten ID (Nummer).
Spalte 2 mit dem String soll mittels INSERT gefüllt werden. Die Zeilen-IDs in der ersten Spalte wird automatisch erzeugt, die letzte Spalte bleibt vorerst leer.

Im weiteren Verlauf soll von mehreren Rechnern aus die erste freie Seriennummer abgerufen und die zweite ID in die letzte Spalte getragen werden. Jede Seriennummer darf nur einmal vergeben werden! D.h. ich möchte in einem Zugriff (also ein SQL) die letzte Spalte updaten und die Seriennummer direkt oder zumindest die Zeilen-ID zurückerhalten.

Mein SQL sähe dann etwa so aus "UPDATE TabName SET Nummer = ... WHERE Nummer IS NULL AND ZeilenID = MIN(ZeilenID). Geht aber nicht, da bekomm ich die Fehlermeldung: "]Invalid use of group function".
Wenn ich diese WHERE-Clause bei SELECT in Verbindung mit "Having" verwende (SELECT * FROM TabName where Nummer is NULL having ZeilenID = MIN(ZeilenID)) erhalte ich die gewünschte Zeile. Having ist aber allerdings auf "Update" nicht anwendbar.

Die Überlegung erst über die select-Anweisung die Zeilen-ID zu erhalten und dann die Nummer in die letzte Spalte dieser Zeile nachzutragen, scheidet aus, weil ja in der Zwischenzeit die Anfrage auf die erste freie Seriennummer eines anderen PCs erfolgen kann. Somit würden beide Stellen mit der gleichen Seriennummer arbeiten, was aber auszuschließen ist.

Hat jemand eine Idee, dieses Problem auf die Art zu lösen oder einen anderen Lösungsvorschlag?

P.S.: der DB-Server, auf den zugegriffen werden muß läuft noch mit SQL4, d.h. ich kann noch keine stored procedures machen.
Die Nummer der letzten Spalte wird auch nur einmal vergeben. Es wäre also möglich, diese Apalte der erste Zeile, bei der noch keine Nummer eingetragen ist, mit der Nummer zu füllen und anschließend die Seriennummer anhand dieser Nummer zu suchen. Wie erhalte ich aber die erste freie Zeile in Verbindung mit der Update-Anweisung?

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
02.02.2007, 19:50
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
MIN-Abfrage bei SQL-Zeilen-Update
Hallo,

ich habe hier gerade kein SQL installiert, aber probier' mal das:

UPDATE TabName SET Nummer = 12345
WHERE Nummer IS NULL AND ZeilenID = (SELECT MIN(ZeilenID) FROM TabName);

Garantieren kann ich allerdings für nichts. Ich hatte auch gestern und heute zum ersten Mal einen SQL-Lehrgang und muss nun meine Erfahrungen damit machen. Wink

Was ich allerdings weiß, ist dass Du in einer WHERE-Klausel nie "direkt" eine Aggregatsfunktion (MIN, MAX, COUNT,....) verwenden darfst.
Und das HAVING ist im Regelfall dafür gedacht, die Ergebnisse bei einem GROUP BY einzuschränken. Bei GROUP BY muss eine Aggregatsfunktion dabei sein.

Eine gute Seite ist diese hier: http://www.sql-und-xml.de/sql-tutorial/index.html
Vielleicht wirst Du auch da fündig, falls mein Tip nicht geholfen hat.

Gruß Markus

' schrieb:Hallo,

dies hat zwar nicht direkt was mit LabVIEW zu tun, ich hoffe aber, daß es unter Euch jemanden gibt, der mir weiterhelfen kann, weil ja auch ein paar Leutchen das SQL-Toolkit nutzen.

Meine Tabelle besteht aus 3 Spalten: eine mit der Zeilen-ID (Autoincrement), eine mit einem String (Seriennummer) und eine mit einer zweiten ID (Nummer).
Spalte 2 mit dem String soll mittels INSERT gefüllt werden. Die Zeilen-IDs in der ersten Spalte wird automatisch erzeugt, die letzte Spalte bleibt vorerst leer.

Im weiteren Verlauf soll von mehreren Rechnern aus die erste freie Seriennummer abgerufen und die zweite ID in die letzte Spalte getragen werden. Jede Seriennummer darf nur einmal vergeben werden! D.h. ich möchte in einem Zugriff (also ein SQL) die letzte Spalte updaten und die Seriennummer direkt oder zumindest die Zeilen-ID zurückerhalten.

Mein SQL sähe dann etwa so aus "UPDATE TabName SET Nummer = ... WHERE Nummer IS NULL AND ZeilenID = MIN(ZeilenID). Geht aber nicht, da bekomm ich die Fehlermeldung: "]Invalid use of group function".
Wenn ich diese WHERE-Clause bei SELECT in Verbindung mit "Having" verwende (SELECT * FROM TabName where Nummer is NULL having ZeilenID = MIN(ZeilenID)) erhalte ich die gewünschte Zeile. Having ist aber allerdings auf "Update" nicht anwendbar.

Die Überlegung erst über die select-Anweisung die Zeilen-ID zu erhalten und dann die Nummer in die letzte Spalte dieser Zeile nachzutragen, scheidet aus, weil ja in der Zwischenzeit die Anfrage auf die erste freie Seriennummer eines anderen PCs erfolgen kann. Somit würden beide Stellen mit der gleichen Seriennummer arbeiten, was aber auszuschließen ist.

Hat jemand eine Idee, dieses Problem auf die Art zu lösen oder einen anderen Lösungsvorschlag?

P.S.: der DB-Server, auf den zugegriffen werden muß läuft noch mit SQL4, d.h. ich kann noch keine stored procedures machen.
Die Nummer der letzten Spalte wird auch nur einmal vergeben. Es wäre also möglich, diese Apalte der erste Zeile, bei der noch keine Nummer eingetragen ist, mit der Nummer zu füllen und anschließend die Seriennummer anhand dieser Nummer zu suchen. Wie erhalte ich aber die erste freie Zeile in Verbindung mit der Update-Anweisung?

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.02.2007, 10:39
Beitrag #3

s200rs Abwesend
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Jul 2005

7.1 / 8.5.1
2002
DE

02826
Deutschland
MIN-Abfrage bei SQL-Zeilen-Update
Hallo,

danke für die Antwort.

Funktioniert leider nicht, zumindest nicht bei mir, denn das ist ein Sub-Select und das arbeitet erst ab MySQL 5. Unser DB-Server hat aber im Moment noch die Version 4.
Habe aber gerade mit meinen Kollegen gesprochen und erfahren, daß wahrscheinlich diese Woche die Entscheidung fällt, wann der DB-Server auf MySQL 5 umgerüstet werden kann, damit dürfte dann auch dieses Barriere weg sein.

Trotzdem nochmal vielen Dank.

________________

LV 7.1; 8.5
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  VI begrenzt gelesene CSV Datei auf 128 Zeilen rackpack 1 1.728 22.04.2022 10:49
Letzter Beitrag: GerdW
  Leere Zeilen aus Array löschen MN_ 7 4.456 28.05.2021 13:17
Letzter Beitrag: Lucki
  SQlite Update syntax Hubert R. 4 3.718 09.09.2020 13:46
Letzter Beitrag: Martin.Henz
  Zeilen einer .txt Datei zählen Alexa 10 13.770 18.08.2012 09:46
Letzter Beitrag: Y-P
  Zeilen aus Listenfeld ausblenden Lucky 1 6.138 12.09.2010 12:02
Letzter Beitrag: Matze
  Abfrage ob Neustart Capricum 3 4.790 26.07.2010 10:00
Letzter Beitrag: GerdW

Gehe zu: