Martin Hesse: Bestimmte Daten aus DB auslesen bereitet Problem

moin moin,

ich habe ein problem und finde seit montag abend keine lösung.
ich habe eine DB mit einer spalte ort...!
in dieser spalte kommen ort wie z.B. Berlin öfters vor! es befinden sich ca. 80 einträge in der DB und einträge in denen in der Spalte Berlin steht kommt nunmal öfters vor!

Nun will ich aber in einem select menü die einzelnen orte angeben lassen, wäre dann aber dumm wenn berlin oder auch nadere städte öfters vorkommt!

hat einer von euch eine idee wie ich es realisieren könnte das der entsprechende ort nur einmal in dem select menü vorkommt?

würde mich um eine antwort freuen!

lg, aus dem kalten norden - martin!

  1. hat einer von euch eine idee wie ich es realisieren könnte das der entsprechende ort nur einmal in dem select menü vorkommt?

    select distinct ort from ...

  2. Hi,

    ich habe ein problem und finde seit montag abend keine lösung.
    ich habe eine DB mit einer spalte ort...!
    in dieser spalte kommen ort wie z.B. Berlin öfters vor! es befinden sich ca. 80 einträge in der DB und einträge in denen in der Spalte Berlin steht kommt nunmal öfters vor!

    "select ort_name from orte group by ort_name"

    Gruss,
    Ludger

    1. Hi Ludger,

      "select ort_name from orte group by ort_name"

      wahrscheinlich wird Dein Ansatz mit GROUP BY zum gleichen Ergebnis führen wie die DISTINCT-Lösung (ich weiß nicht, wie es mit der Performance bei MySQL aussieht, bei MSSQL sind die Execution Plans der beiden Querys identisch). Allerdings sehe ich GROUP BY als eine Klausel, die bei der Aggregation von Daten Anwendung findet, und eine solche liegt hier nicht vor. Deshalb würde ich DISTINCT vorziehen, das macht die Query lesbarer und erschiene mir als der bessere Stil - und ein solcher macht das Leben leichter.

      hth Robert

      1. Hi,

        Deshalb würde ich DISTINCT vorziehen, das macht die Query lesbarer und erschiene mir als der bessere Stil - und ein solcher macht das Leben leichter.

        habe ich bis vor kurzem auch geglaubt, allerdings meine Meinung geaendert: http://forum.de.selfhtml.org/archiv/2005/1/t99178/#m605855

        Also GROUP BY und Aggregatfunktionen kommen in der freien Natur zwar haeufig zusammen vor, aber das kleine GROUP BY kann auch alleine fuer sich bestehen.

        Gruss,
        Ludger

        1. Hi,

          Deshalb würde ich DISTINCT vorziehen [...]
          habe ich bis vor kurzem auch geglaubt, allerdings meine Meinung geaendert: http://forum.de.selfhtml.org/archiv/2005/1/t99178/#m605855

          Nach dem Überfliegen der von Dir verlinkten Diskussion ist mir nicht evident, warum ich meine Meinung ändern sollte...

          Also GROUP BY und Aggregatfunktionen kommen in der freien Natur zwar haeufig zusammen vor, aber das kleine GROUP BY kann auch alleine fuer sich bestehen.

          Klar kann es das, aber ich betrachte es aus stilistischer Perspektive gegenüber der Alternative DISTINCT als die schlechtere Wahl. Wenn wir allerdings nicht einer Meinung sind, daß Aggregation eine natürliche Begleiterscheinung von GROUP BY ist, dann sind unsere Sichtweisen eben unterschiedlich.

          hth Robert

          1. Hi,

            Klar kann es das, aber ich betrachte es aus stilistischer Perspektive gegenüber der Alternative DISTINCT als die schlechtere Wahl. Wenn wir allerdings nicht einer Meinung sind, daß Aggregation eine natürliche Begleiterscheinung von GROUP BY ist, dann sind unsere Sichtweisen eben unterschiedlich.

            Ok, da zu zu den eher wenigen gehoerst, bei denen es mich nicht in meiner Meinung bestaerkt bzw. egal ist, wenn ein Dissenz festgestellt wird (der Mann aus Karlsruhe faellt mir da noch ein), bearbeite ich den Sachverhalt noch einmal wie folgt:

            Gegeben ist eine Datentabelle 'DT_1' eines RDBMSs mit den Datenfeldern 'DF_1', 'DF_2' und 'DF_3'. Zu betrachten sind die beiden unetrschiedlichen auf der GROUP BY-Klausel bzw. DISTINCT-Klausel basierenden Abfragemoeglichkeiten um die Anforderung asu https://forum.selfhtml.org/?t=99736&m=609738 moglichst fachgerecht zu bearbeiten.

            mit DISTINCT:
            die Abfrage koennte lauten:
            SELECT DISTINCT
             DF_1,
             DF_2,
             DF_3
            FROM
             DT_1

            Vorteile:

            • das Schluesselwort DISTINCT stellt fuer den Programmierer klar, dass Dubletten aus der zurueckgegeben Datensatzmenge entfernt werden
              Nachteile:
            • es gibt einen "DISTINCT-Missbrauch" bei denen, die die Datenzugriffsschicht bearbeiten (DISTINCT ist selten bis nie erforderlich)

            mit GROUP BY:
            die ABfrage koennte lauten:
            SELECT
             DF_1,
             DF_2,
             DF_3
            FROM
             DT_1
            GROUP BY
             DF_1,
             DF_2,
             DF_3

            Vorteile:
            Nachteile:

            • bestimmte DBMSe (mis)interpretieren "SELECT DF_1, DF_2, DF_3 FROM DT_1 GROUP BY DF_1", anstatt wie z.B. der M$SQLServer eine Fehlermeldung zu servieren
            • das SELECT-Statement wird wegen der Wiederholung der in der abgefragten Datenfelder in der GROUP BY-Klausel laenger als erforderlich

            Zusammenfassung:
            Beide Herangehensweisen sind ideologisch/stilistisch OK, die MySQL-Gemeinde mag mit der DISTINCT-Version besser versorgt sein, die stolzen Betreiber von Oracle und M$SQL Datenservern mit der GROUP BY-Variante, die auch dem DISTINCT-Missbrauch weniger erfahrener Kraefte keine weitere Nahrung gibt.

            in dieem Sinne,
            Gruss,
            Ludger