Problem mit MySQL-Abfrage

Status
Nicht offen für weitere Antworten.

rtt

Bekanntes Mitglied
Hallo,

ich möchte aus meiner MySQL-DB den Eintrag mit der kleinsten ID auslesen lassen. Normalerweise geht das mit SQL so:
Code:
SELECT MIN(id) FROM renderauftrag GROUP BY id

Wenn ich das ganze nun in Java einfüge, kommt die Fehlermeldung:
java.sql.SQLException: Column index out of range, 2 > 1

Wie muß ich den Select in Java schreiben, damit er es korrekt ausliest?
Vielen Dank schonmal für die Hilfe.
Gruß Robin
 

Bleiglanz

Gesperrter Benutzer
vergiss den GROUP BY? Was soll der an der Stelle?? du kannst nicht nach einer Spalte gruppieren und gleichzeitig eine Aggregatfunktion darauf loslassen!

Das Resultset bei dieser Abfrage besteht aus genau einer zeile und einer Spalte (also rs.next()...rs.getInt(1) ist schon alles)
 

rtt

Bekanntes Mitglied
es soll ja der ganze Datensatz mit der kleinsten ID angezeigt werden, nicht nur die ID selbst.

Hier mal ein auszug aus meinem code:
Code:
            Statement stmt = connection.createStatement();
       		String sql_out = "SELECT MIN(id) FROM renderauftrag"; 
       		ResultSet rs = stmt.executeQuery(sql_out);
       		//while(rs.next()){System.out.println(rs.getInt(1));}
       		
       		while(rs.next()) 
				{  
    			System.out.print(rs.getString(1));
    			System.out.print(rs.getString(2)); 									// Ausgabe der Spalten
    			System.out.print(rs.getString(3)); 
    			System.out.print(rs.getString(4));
    			System.out.print(rs.getString(5)); 
    			System.out.print(rs.getString(6)+"\n"); 
				}

Gruß Robin
 

rtt

Bekanntes Mitglied
Hab das Problem gelöst.
damit gehts:
Code:
String sql_out = "SELECT Min(id), cmd0, cmd1, cmd2, cmdV, ip FROM renderauftrag GROUP by id";

Gruß Robin
 

rtt

Bekanntes Mitglied
also, das Problem scheint doch nicht gelöst zu sein.
Bei dieser Variante, ließt er alle einträge aus.
Ich benötige aber nur einen Eintrag, nämlich den mit der kleinsten id.

Benötige nochmal eure Hilfe.
Gruß Robin
 

thE_29

Top Contributor
Code:
String sql_out = "SELECT * FROM renderauftrag where id = (SELECT MIN(id) from renderauftrag)


sowas geht nur mit subselects :)
 

abollm

Top Contributor
rtt hat gesagt.:
Hallo,

ich möchte aus meiner MySQL-DB den Eintrag mit der kleinsten ID auslesen lassen. Normalerweise geht das mit SQL so:
Code:
SELECT MIN(id) FROM renderauftrag GROUP BY id

Wenn ich das ganze nun in Java einfüge, kommt die Fehlermeldung:
java.sql.SQLException: Column index out of range, 2 > 1

...

Also, ehrlich gesagt verstehe ich dein Problem nicht ganz. Wenn du _allein_ den kleinsten ID-Eintrag aus deiner Datenbank abfragen und anzeigen lassen willst, dann würde ich folgenden SQL-Befehl eingeben:
Code:
SELECT MIN(id) FROM renderauftrag
Wenn du alle ID-Einträge aufsteigend, beginnend mit der kleinsten Nummer, anzeigen lassen willst, schreibst du:
Code:
SELECT id FROM renderauftrag order by id

Evtl. liegt hier - je nach Problemstellung aber auch ein datenbankabhängiges Problem vor. In Oracle kann ich z.B. schreiben:
Code:
SELECT MIN(id) FROM renderauftrag GROUP BY id

Und zwar, _ohne_ Auftreten einer SQL-Fehlermeldung. Die Frage ist nur, was mir die zusätzliche GROUP BY-Klausel bringt. Im Regelfall dürfte sich in diesem Fall die Ausführung der SQL-Abfrage verlangsamen.

Sollte MySQL etwa Standard-SQL-Syntax nicht richtig ausführen?
 

rtt

Bekanntes Mitglied
wenn ich "SELECT MIN(id) FROM renderauftrag " benutze, bekomme ich nur die Zahl der kleinsten ID.
Ich möchte aber nicht nur die kleinste ID angezeigt bekommen, sondern auch den rest der zeile.
Also ungefähr so:
id | cmd0 | cmd1 | cmd2 | cmdV | ip |
-----------------------------------------------------
1 | x1 | y1 | z1 | xyz | 123 |
 

abollm

Top Contributor
rtt hat gesagt.:
wenn ich "SELECT MIN(id) FROM renderauftrag " benutze, bekomme ich nur die Zahl der kleinsten ID.
Ich möchte aber nicht nur die kleinste ID angezeigt bekommen, sondern auch den rest der zeile.
Also ungefähr so:
id | cmd0 | cmd1 | cmd2 | cmdV | ip |
-----------------------------------------------------
1 | x1 | y1 | z1 | xyz | 123 |

Wo ist das Problem?

Wenn du alle Einträge auftsteigend sortiert haben willst, schreibst du folglich:
Code:
SELECT id, cmd0, cmd1, cmd2, cmdV, ip FROM renderauftrag order by id

Das ist schon alles.
 

thE_29

Top Contributor
abollm, du weißt nicht wirklich was er will?

hab meinen sql Befehl nur in access/oracle ausprobiert und da gehts!
habs jetzt nun auf mysql ausprobiert und da gehts nit! (sehr komisch)
würde dir empfehlen einfach 2 befehl daraus zu machen
Code:
String strSql1 = "SELECT MIN(id) FROM renderauftrag"; //den wert merkst du dir
String strSql2 = "SELECT * FROM renderauftrag where id = " + variable;

schau obs so geht!
 

rtt

Bekanntes Mitglied
@thE_29
das problem liegt darin, dass ich nicht alle zeilen ausgeben will, sondern nur eine zeile, die mit der kleinsten id.
Also wenn ich 100 Einträge (zeilen) und ich nur einen Eintrag (zeile) angezeigt bekommen möchte.
 

thE_29

Top Contributor
naja, mach so wie ich es geschrieben habe!

mit dem ersten befehl bekommst du die kleinste id und mit dem 2ten fragst du auf diese ab

wenn es ein primary oder unique key ist geht das!
 

rtt

Bekanntes Mitglied
äh, der vorhergehende comment ging eigentlich an abollm. sorry meinte dich nicht thE_29.
Ich werd's mal so probieren, wie du sagtest. Danke erstmal.
Gruß Robin
 

abollm

Top Contributor
thE_29 hat gesagt.:
abollm, du weißt nicht wirklich was er will?

hab meinen sql Befehl nur in access/oracle ausprobiert und da gehts!
habs jetzt nun auf mysql ausprobiert und da gehts nit! (sehr komisch)
würde dir empfehlen einfach 2 befehl daraus zu machen
Code:
String strSql1 = "SELECT MIN(id) FROM renderauftrag"; //den wert merkst du dir
String strSql2 = "SELECT * FROM renderauftrag where id = " + variable;

@thE_29:

Das ist aus seinem letzten Posting ja nun eindeutig klar. Aber du hast ja scon in deinem ersten Posting die Lösung dafür gegeben. Wenn diese in MySQL nicht funktioniert, liegt es offensichtlich an MySQL. Ich werde das jetzt einmal in MYSQL testen.
 

foobar

Top Contributor
In Mysql würde ich das so machen:
Code:
SELECT * 
FROM renderauftrag
order by id
limit 1
 

thE_29

Top Contributor
@abollm: der zusammengehängte befehl ging net, aber extra gehn sie!
warum sie zusammengehängt net gehen, versteh i net wirklich!
aber du könntest auch foobars beitrag nehmen :)
deiner war ja eigentlich auch so!

wenn man sagt order by und einfach den ersten nimmt, ist es ja eigentlich das minimum :)
du müsstest ja net mal limit 1 sagen, einfach nur den ersten satz nehmen und den rest kannste knicken .. ;)
 

rtt

Bekanntes Mitglied
@thE_29
es funktioniert, danke

ich habs so gemacht:
Code:
            // select from DB
    		   Statement stmt = connection.createStatement();
       		String sql_id = "";
       		
       		// getting id from Select
       		String sql_out_id = "SELECT MIN(id) FROM renderauftrag";
       		ResultSet rs1 = stmt.executeQuery(sql_out_id);
       		while(rs1.next()){sql_id = rs1.getString(1);}
       		
       		// getting entry with selected id
       		String sql_out = "SELECT * FROM renderauftrag WHERE id="+sql_id;
       		System.out.println(sql_out);		
       		ResultSet rs = stmt.executeQuery(sql_out);
       		while(rs.next()) 
				{  
    			System.out.print(rs.getString(1)+"\n");
    			System.out.print(rs.getString(2)+"\n"); 									// Ausgabe der Spalten
    			System.out.print(rs.getString(3)+"\n"); 
    			System.out.print(rs.getString(4)+"\n");
    			System.out.print(rs.getString(5)+"\n"); 
    			System.out.print(rs.getString(6)+"\n"); 
				}

Das Problem ist, das die Einträge immer wieder gelöscht werden, ähnlich einer Warteschlange. Derjenige der schon dran war fliegt raus und der nächste rutscht nach.

Danke Jungs für eure Hilfe.
Gruß Robin
 

rtt

Bekanntes Mitglied
Hab nochmal foobar's vorschlag ausprobiert.
Es funktioniert ebenfalls.
THX
Gruß Robin
 

Bleiglanz

Gesperrter Benutzer
du kannst auch einen self join der Tabelle mit sich selbst machen (das ist in mysql der Ersatz für subselects)
 

foobar

Top Contributor
du kannst auch einen self join der Tabelle mit sich selbst machen (das ist in mysql der Ersatz für subselects)
Wie kann man denn die Aggregatsfuktion in dem Selfjoin unterbringen? Ich habs zuerst auch mit einem Selfjoin probiert, hatte aber Probleme die Min-Funktion zu verwenden.
 

nollario

Bekanntes Mitglied
version:

beim mysql shell kommt sowas:
Your MySQL connection id is 10584 to server version: 4.0.17-standard

ausserdem kannst du durch die eingabe von

Code:
status;
(auch im mysql client)

infos über den server bekommen....
 

thE_29

Top Contributor
also bei version kommt ein TÜT
und status sagt
4.0.20a
also die 4.0.20a und da gehn keine subs

brauch ich also ne 4.1.xx?
 

Bleiglanz

Gesperrter Benutzer
ich machs mal aus dem Kopf

SELECT a.id, a.wert1, MIN(b.id) -- vorne was du willst
FROM meine a, meine b -- zweimal das gleiche
WHERE a.id = b.id -- über den primärschlüssel zusammenhängen
GROUP BY b.id -- in der "Kopie" Gruppieren

bitte nicht schimpfen wenns nicht geht, sowas ist immer frickelig

mit dem self join praktisch an jede Zeile eine Kopie anhängen und dann "hinten" gruppieren
 

Bleiglanz

Gesperrter Benutzer
natürlich quatsch, echt falsch

GROUP BY b.id geht sicher nicht:), jetzt muss ichs doch mal ausprobieren
 

Bleiglanz

Gesperrter Benutzer
ohne die WHERE Klausel, mit Having gehts

SELECT a.id, a.wert , MIN(b.id)
FROM list a, list b
GROUP BY a.id, a.wert
HAVING a.id = MIN(b.id)
 

abollm

Top Contributor
Ich sage nur: im Zweifelsfalle lieber doch ein _echtes_ RDBMS verwenden, wie z.B. Oracle. MySQL ist zwar gut, aber so richtig professionellen Ansprüchen genügt es zurzeit noch nicht.
Was nicht ist, kann aber noch werden.
 

thE_29

Top Contributor
naja, für den heimgebrauch reicht mysql :)
außerdem isses leicht handzuhaben (meiner meinung nach)

aber es gibt sicher noch ein paar andere gratis DBs :)
 

foobar

Top Contributor
@Bleiglanz Danke :) Auf die Idee das ganze mit Having zu lösen, bin ich nicht gekommen. Ich hab es die ganze Zeit mit group by vergeblich versucht.
BTW die Group-By-Klausel kann man auch weglassen, da a.id und MIN(b.id) sowieso den selben Wert haben.
Code:
SELECT a.id, a.wert
FROM list a, list b
HAVING a.id = MIN(b.id)
 

semi

Top Contributor
Wie wär's damit?
Code:
SELECT id, cmd0, cmd1, cmd2, cmdV, ip
FROM tabelle
ORDER BY id
LIMIT 1
bzw. für die höchste ID
Code:
SELECT id, cmd0, cmd1, cmd2, cmdV, ip
FROM tabelle
ORDER BY id DESC
LIMIT 1
Gruß,
Michael
 

thE_29

Top Contributor
das hatten wir schon :)
und das limit1 kannste dir genausogut sparen, musst ja einfach nur das erste ergebnis rauslesen ;)
 
G

Guest

Gast
Ohh, sorry. Ich habe die Antwort von foobar übersehen. :autsch:
Wenn man nicht vor hat eine andere Datenbank zu verwenden, dann ist es
die einfachste Lösung, die auch in der MySQL-Doku vorgeschlagen wird.

Gruß,
Michael
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
S Problem bei MySql abfrage Datenbankprogrammierung 11
M [MYSQL] Problem mit Connection und Abfrage Datenbankprogrammierung 6
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
G MySQL Connection Problem Datenbankprogrammierung 3
F MySQL - Connection JDBC-Driver Problem Datenbankprogrammierung 4
F eigenartiges Java/mysql problem Datenbankprogrammierung 9
S problem mit mysql ausgabe. Datenbankprogrammierung 3
G Problem beim Schreiben eines Dateipfads in MySQL-DB Datenbankprogrammierung 9
M Problem mit MYSQL Verbindung Datenbankprogrammierung 7
N Problem mit Verbindung zu externer MySQL Datenbank Datenbankprogrammierung 8
U Java und Mysql Problem über 24:00:00 Stunden Datenbankprogrammierung 4
M Problem: Große Datei in MySQL DB importieren. Datenbankprogrammierung 12
R Problem mit Autocommit (MySQL) Datenbankprogrammierung 4
N Problem mit executeQuery in mysql Datenbankprogrammierung 9
D problem mit mysql übers netz. Datenbankprogrammierung 5
S Problem bei Eingabe von Dateipfad in eine MySQL-Datenbank Datenbankprogrammierung 4
T problem mit mysql connection Datenbankprogrammierung 6
G MySQL: Login-Problem: No suitable Driver Datenbankprogrammierung 13
F Problem mit MySQL-Datenbank und Java-Applet Datenbankprogrammierung 2
T Problem bei MySQL Connect über JavaBean Datenbankprogrammierung 3
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben