AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS SQLite - Select mit mehreren Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite - Select mit mehreren Tabellen

Ein Thema von Crocotronic · begonnen am 15. Mär 2014 · letzter Beitrag vom 17. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#1

SQLite - Select mit mehreren Tabellen

  Alt 15. Mär 2014, 23:04
Guten Abend,
vielleicht kann mir von euch jemand erklären, warum folgender Select-Befehl unter iOS nicht funktioniert:
Code:
SELECT s.teamA, count(t.recno) FROM spiel s, tor t WHERE s.recno = t.spielnr GROUP BY s.teamA
Müsste normalerweise funktionieren, unter iOS gibt es aber die Exception "Operation wird nicht unterstüzt"

Viele Grüße
Croco

Geändert von Crocotronic (15. Mär 2014 um 23:09 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 08:48
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
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 10:07
P.S.: 4. das Count(feldname) durch count(*) ersetzen
Kommt drauf an, was man zählen will.

SELECT count(*) AS Datensätze, count(Feld) AS NichtLeer FROM Tabelle

count(*) zählt alle Datensätze und count(Feld) zählt nur mit, wenn etwas in "Feld" drin ist. (Feld IS NOT NULL )


Ich glaub das GROUP BY 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.

SQL-Code:
SELECT teamA, count(*)
FROM spiel
JOIN tor ON spiel.recno = spielnr
Mit einem LEFT JOIN würde man dann auch die Teams ohne Tore erwischen.
SQL-Code:
SELECT teamA, count(tor.recno)
FROM spiel
JOIN tor ON spiel.recno = spielnr
$2B or not $2B

Geändert von himitsu (16. Mär 2014 um 10:22 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 10:23
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>
  Mit Zitat antworten Zitat
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#5

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 15:13
Vielen Dank für die Tipps, funktioniert jetzt
Code:
SELECT teamA, count(*)
FROM spiel
JOIN tor ON spiel.recno = spielnr GROUP BY teamA
Jetzt habe ich nur noch ein Problem mit dem Subselect. In meinem Fall muss ich etwas gruppieren und dann den Mittelwert aller Gruppen berechnen:
Code:
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
                      );
Das Beispiel ist zwar nicht gerade anschaulich, zeigt aber was ich machen will.
Hierbei bekomme ich wieder den Fehler, dass die Operation nicht unterstüzt wird.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 15:22
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#7

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 16:25
Das ist es leider auch nicht
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 16:32
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#9

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 16:48
Und immernoch wird die Exception "Operation wird nicht Unterstützt" ausgelöst
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: SQLite - Select mit mehreren Tabellen

  Alt 16. Mär 2014, 16:55
Und wenn Du das Dummyfeld in die derived table verschiebst?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:16 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