Distinct erzwingen (query rewrite)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Distinct erzwingen (query rewrite)

    Hallo,

    ich hab hier ein problem dass mich schon etwas länger beschäftigt,
    und ich steh momentan total auf dem schlauch.

    Ich habe 2 tabellen mit folgenden shemata (vereinfacht)

    Tabelle 1
    Code:
    id | second_id
    Tabelle2
    Code:
    id|number|second_id|third_id
    Meine problem ist das joinen der beiden tabellen nach
    second_id.

    Code:
    SELECT DISTINCT number, t1.id  FROM tabelle1 AS t1
        INNER JOIN Tabelle2 AS t2 ON  t1.second_id = t2.second_id
    WHERE t2.third_id = 3
    ORDER BY t1.id
    Vorweg, das ganz läuft gegen einen MSSQL-server.
    Das problem ist nun dass datensätze mit unterschiedlicher
    t1.id durchaus mehreren datensätzen aus t2 zugeordnet werden
    können. Mein ergebnis ist also distinct bzgl. "t1.id".
    Was ich aber möchte ist dass das ergebnis distinct bzgl "nummer"
    ist.
    Dabei ist es zunächst mal egal, welche "t1.id" dann "nummer"
    zugeordnet ist. Wichtig ist, dass "nummer" nicht doppelt vorkommt.

    Das blöde ist dass ich keinen einfluss auf das schema der db habe
    und auch nichts an den datensätzen ändern kann.

    Hat jemand eine idee ?

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

  • #2
    ich bin sozusagen laie

    .........

    aber zuerst fällt mir auf, das du in der query die spalte "number" nicht an t2 gebunden hast (t2.number)..... anderenfalls wäre es eine überlegung den distinct in klammern zusetzen um den distinct eben nur auf die t2.number zu legen...... SELECT DISTINCT(t2.number), t1.id FROM......


    war jetzt nur ne überlegung, aber keine lösung..... wenns funktioniert, dann freu ich mich ;-).............


    vielleicht postest du auch mal ein paar inhalte aus der db (auch fiktiv) um das ganze besser nachvollziehen zu können......




    beste grüße, iceX77

    Kommentar


    • #3
      ... vielleicht hilft das......

      ...............





      http://www.sql-server-performance.co...t_distinct.asp



      und/oder:





      http://msdn2.microsoft.com/de-de/library/ms132161(SQL.90).aspx





      ..............................




      grüße, iceX77





      ------------------------------------------------------------------------------------

      Brot für die Welt, aber die Wurst für mich.........
      Zuletzt geändert von iceX77; 29.03.2006, 22:59.

      Kommentar


      • #4
        Hi,

        da number nur in einer tabelle vorkommt kann man es auch so schreiben.
        Es ist dann trotzdem eindeutig, aber du hast recht der besseren
        übersichtlichkeit wegen kann man das machen.
        Erstmal danke für die links, auch wenn ich sie vorher schon gelesen
        hatte.

        Den wert den man distinct haben will in klammern zu setzen,
        funktioniert leider nicht bei MSSQL.

        Ich will noch mal ein bisschen weitere da problem versuchen begreiflich zu machen,
        da ich mich recht schwer tue genau zu erklären worum es geht.
        Ich kann/darf leider auch nicht zu viel über die "innerein" der db sagen,
        deswegen hab ich nur dieses, zugegebenermaßen "abstrakte",
        minimalistische beispiel gegeben.

        Eine wichtig sache habe ich noch vergessen zu erwähnen.
        Wenn ich t1.id nicht mit ins ergebnis aufnehme, dann
        bekomme ich auch wirklich eine ergebnis dass distinct bzgl.
        t2.number ist. Man kann sich t2 etwa so vorstellen.

        Code:
        id | number | second_id | third_id
        1      10        100           3
        2      10        101           3
        3      20        102           3
        4      20        103           3
        5      20        104           4
        Es kann afaik auch vorkommen dass es innerhalb von t2,
        dublikate von second_id gibt. Das problem ist, dass ein
        ergebnis dass distinct bzgl. second_id ist nicht automatisch
        auch distinct bzgl. number ist, da verschiedene second_id
        der gleichen nummer zugeordnet werden.

        Ich hoffe ich konnte ein bisschen klarer machen worum
        es geht.

        greets
        (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

        Kommentar


        • #5
          und vielleicht

          SELECT t1.id, DISTINCT t2.number........


          ungetestet........ einfach mal probieren..... ansonsten müsste irgendwo eine zweite select-anweisung in klammern rein die den distinct auf t2.number bezieht






          grüße, Andreas

          Kommentar


          • #6
            Hi,

            danke für die tipps. Leider funktioniert es so nicht.
            Inzwischen ist es zum glück auch hinfällig. Ich bin letztendlich von
            falschen vorraussetzungen ausgegangen sodass sich das problem
            nun nicht mehr stellt.
            Es ist wie ich vermutet habe. Solcherlei probleme lassen sich nur lösen
            in dem man das db-design entsprechend verbessert. Die ergebnisse
            die ich bekomme sind absolut korrekt, das dbms tut nur was man
            ihm sagt.

            Ich habe einfach die falschen tabellen versucht zu joinen. Wenn
            man es mit anderen (vorhandenen) macht, bekommt man eine
            vorbedingung die dann den join wie ich ihn vorhatte so beeinflusst,
            dass keine dublikate mehr auftauchen.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar

            Lädt...
            X