![]() |
SQLite - Select mit mehreren Tabellen
Guten Abend,
vielleicht kann mir von euch jemand erklären, warum folgender Select-Befehl unter iOS nicht funktioniert:
Code:
Müsste normalerweise funktionieren, unter iOS gibt es aber die Exception "Operation wird nicht unterstüzt" :pale:
SELECT s.teamA, count(t.recno) FROM spiel s, tor t WHERE s.recno = t.spielnr GROUP BY s.teamA
Viele Grüße Croco |
AW: SQLite - Select mit mehreren Tabellen
Keine Ahnung warum.
In solchen Fällen versuche ich, so klassisch wie möglich zu arbeiten. Also ausprobieren, ob eine möglichst konventionelle oder Standard-nahe Schreibweise hilft. 1. Aliase nutzen, fehlt beim Count Ausdruck 2. Join Notation verwenden (statt where) 3. Select Statement verschachteln, also ein (normal nicht benötigtes) 2. Select um das nicht funktionierende herumbauen, natürlich ohne weitere Bedingungen und so. Alternativ die eigentliche Fehlerquelle eingrenzen, indem bestimmte Konstrukte systematisch entfernt werden, z.B. hier das Count. Das bedeutet, ein komplexes Stück Code / SQL so lange vereinfachen, bis man auf minimale Art den Fehler reproduzieren kann. So kann man wenigstens rausfinden, was funktioniert und wo man vielleicht workarrounds finden muss. Das reduzierte Code Fragment eignet sich auch prima für Nachfragen in Foren. P.S.: 4. das Count(feldname) durch count(*) ersetzen |
AW: SQLite - Select mit mehreren Tabellen
Zitat:
SQL-Code:
SELECT count(*) AS Datensätze, count(Feld) AS NichtLeer FROM Tabelle
SQL-Code:
zählt alle Datensätze und
count(*)
SQL-Code:
zählt nur mit, wenn etwas in "Feld" drin ist. (
count(Feld)
SQL-Code:
)
Feld IS NOT NULL
Ich glaub das
SQL-Code:
könnte man auch weglassen, da bestimmt schon über das Count gruppiert zusammengefasst wird und es sowieso nur noch das Feld "teamA" gibt, welches keine Aggregate-Function ist.
GROUP BY
SQL-Code:
Mit einem LEFT JOIN würde man dann auch die Teams ohne Tore erwischen.
SELECT teamA, count(*)
FROM spiel JOIN tor ON spiel.recno = spielnr
SQL-Code:
SELECT teamA, count(tor.recno)
FROM spiel JOIN tor ON spiel.recno = spielnr |
AW: SQLite - Select mit mehreren Tabellen
Nee, 'GROUP BY' muss immer da sein, wenn nicht über alles aggregiert wird. Ich verstehe nicht warum, aber man muss es angeben, obwohl die GROUP BY Klausel immer der Feldliste entspricht, die im SELECT angegeben ist, wenn man die Aggregatfunktionen weglässt.
Code:
SELECT <BlaFaselZeugs>
, SUM(Foo) , COUNT(*) , AVG(Bar) FROM Tabelle GROUP BY <BlaFaselZeugs> |
AW: SQLite - Select mit mehreren Tabellen
Vielen Dank für die Tipps, funktioniert jetzt :thumb:
Code:
Jetzt habe ich nur noch ein Problem mit dem Subselect. In meinem Fall muss ich etwas gruppieren und dann den Mittelwert aller Gruppen berechnen:
SELECT teamA, count(*)
FROM spiel JOIN tor ON spiel.recno = spielnr GROUP BY teamA
Code:
Das Beispiel ist zwar nicht gerade anschaulich, zeigt aber was ich machen will.
SELECT AVG(tmp) FROM (
SELECT table1.feld3, table2.feld5, (SUM(...)/COUNT(*))/10 AS tmp FROM table1 JOIN table2 ON table1.fkey = table2.pkey GROUP BY table1.feld3, table2.feld5 ); Hierbei bekomme ich wieder den Fehler, dass die Operation nicht unterstüzt wird. |
AW: SQLite - Select mit mehreren Tabellen
Ich kenne mich mit SqLite nicht so aus, versuch mal
SQL-Code:
SELECT AVG(s.tmp) as tmp FROM ( SELECT table1.feld3, table2.feld5, (SUM(...)/COUNT(*))/10 AS tmp FROM table1 JOIN table2 ON table1.fkey = table2.pkey GROUP BY table1.feld3, table2.feld5 ) s; |
AW: SQLite - Select mit mehreren Tabellen
Das ist es leider auch nicht :|
|
AW: SQLite - Select mit mehreren Tabellen
Wenn SQLite immer ein Gruppierungsfeld haben will, dann geben wir es ihm halt
SQL-Code:
SELECT
1 as Feld, AVG(s.tmp) as tmp FROM ( SELECT table1.feld3, table2.feld5, (SUM(...)/COUNT(*))/10 AS tmp FROM table1 JOIN table2 ON table1.fkey = table2.pkey GROUP BY table1.feld3, table2.feld5 ) s group by s.Feld; |
AW: SQLite - Select mit mehreren Tabellen
Und immernoch wird die Exception "Operation wird nicht Unterstützt" ausgelöst :(
|
AW: SQLite - Select mit mehreren Tabellen
Und wenn Du das Dummyfeld in die derived table verschiebst?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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-2025 by Thomas Breitkreuz