Verschachtelte Select anweisungen in SQLite (Android)

Ken Masters

Lt. Junior Grade
Registriert
Dez. 2006
Beiträge
334
Hallo allerseits,

ich komme gerade mit einer Anweisung nicht weiter. Und zwar habe ich eine folgende Tabelle

ID | Name | Betrag | Grund | IconId | waehrung

Die Datenbank kann mehrere Einträge einer gleichen Person beinhalten (bezogen auf den Namen, beispiel: Eine Person namens Müller hat 5 Einträge, dann gibt es noch andere namen die aber nur einmal vorkommen). Nun habe ich eine Anweisung, welche alle Einträge einer person, indem fall jetzt müller ausgeben soll. die sieht folgendermaßen aus:

Anweisung 1:
SELECT _id, " + KEY_DATUM + " as d, " + KEY_BETRAG + " as b, " + KEY_WAEHRUNG + " as w FROM " + DATABASE_TABLE1 + " where TRIM(" + KEY_NAME + ") = (SELECT TRIM(" + KEY_NAME + ") FROM " + DATABASE_TABLE1 + "
where " + KEY_ID + "=" + person + " ORDER BY datum ASC)"

Ich muss noch erwähnen einige einträge von müller auch klein/groß geschrieben sind bzw. leerzeichen enthalten (daher TRIM). Diese anweisung funktioniert auch.
Nun möchte ich aber nur die spalte währung von der Anweisung 1 haben. Habe dann daher folgende Anweisung 2 kreiert:

SELECT waehrung FROM (Anweisung 1) WHERE " + KEY_WAEHRUNG + " = '" + waehrung + "'";

Bekomme am ende folgende fehlermeldung:
Code:
java.lang.RuntimeException: Unable to resume activity ... android.database.sqlite.SQLiteException: no such column: waehrung (code 1): , while compiling: SELECT waehrung FROM(SELECT _id, datum as d, betrag as b, waehrung as w FROM debtorTable where TRIM(name) = (SELECT TRIM(name) FROM debtorTable where _id=1 ORDER BY datum ASC)) WHERE waehrung = 'EUR'

was genau mache ich den falsch, dass es keine spalte währung existiert!??

Danke im voraus für die hilfestellungen und tipps
 
waehrung as w <- die äußere Abfrage darf also nicht nach waehrung fragen, sondern nach w

Insgesamt würd ich hier mal das Datenbank-Schema komplett überdenken. Wenn ich hier schon TRIM's sehe...

The key, the whole key and nothing but the key! So help me, Codd!
 
Ich frag mich was mit dem table los sein soll.

eigentlich sollte man "namen" irgendwie normalisiert schreiben, also nur Müller oder eben Mueller, aber nicht müller, mÜller, etc.

die eigentliche anforderung "es gibt eine person mit mehreren einträgen" ist nämlich irgendwie merkwürdig. warum hat die person keine id und einen eigenen table für personen? dann wäre "es gibt eine person" konkreter.
 
@madman: wieso? ich selektiere doch währung : SELECT _id, " + KEY_DATUM + " as d, " + KEY_BETRAG + " as b, " + KEY_WAEHRUNG + " as w...

@Daaron, jup danke. jetzt funzt es wunderbar

@calav: ich hab mueller schnell als müller hier eingetragen. das ist ja nur zum üben gedacht. :)
 
Du solltest trotzdem deine Datenbank normalisieren. Man macht keine Kreuz-und-Quer - Queries auf irgend welche Namen. Gib jeder Person eine eindeutige numerische ID, das macht das Leben leichter.
 
Ken Masters schrieb:
@madman: wieso? ich selektiere doch währung : SELECT _id, " + KEY_DATUM + " as d, " + KEY_BETRAG + " as b, " + KEY_WAEHRUNG + " as w...

madman hat Recht!
Deine innere Table liefert folgende Spalten zurück: _id, d, b, w
Da ist keine Spalte waehrung enthalten.

Daaron hat natürlich auch Recht!
 
Zurück
Oben