Ist über SQL Statement möglich ...?



  • Hi,

    fällt euch zu diesen Problem was ein ?

    Aus Performancegründen will ich aus einer Datentabelle per SQL
    Datensätze ausgeben, die folgende Bedingung erfüllen:

    Set_x.field_A = set_y.field_A AND Set_x.field_B = set_y.field_B

    So eine Art DISTRINCTROW - nur das die doppelten Einträge angezeit werden. 😮

    Vielen Dank!

    P84



  • Prof84 schrieb:

    Hi,

    fällt euch zu diesen Problem was ein ?

    Aus Performancegründen will ich aus einer Datentabelle per SQL
    Datensätze ausgeben, die folgende Bedingung erfüllen:

    Set_x.field_A = set_y.field_A AND Set_x.field_B = set_y.field_B

    So eine Art DISTRINCTROW - nur das die doppelten Einträge angezeit werden. 😮

    Vielen Dank!

    P84

    Doppelte einträge?? Sowas darf doch eigentlich gar nicht sein...

    Versuch mal ein Join mit sich selbst auf das erbeniss. (hab aber nicht soo die große ahnung von SQL)



  • Zur Illustration:

    Set | F_X | F_Y | F_Z | F_A | F_B
    1     bla   bli   blu   45    8
    2     hj    jhk   jlk   45    7
    3     hg    bj    jh     4    8
    4     hk    loi   lkj   45    8
    

    Hits sind Set 1 und 4.
    Mit Join verknüpfst Du zwei unterschiedliche Tabellen.
    Hmmm....



  • Also, der trick dabei ist das du die selbe tabelle mit 2 namen nimmst, und dann miteinander verknüpfst. Also genau so wie du schon geschrieben hast. (das nennt sich auch Join in der relationalen Alg.)

    Select * form A a, A b where a.x=b.x AND a.y=b.y

    siehe auch hier http://www3.in.tum.de/lehre/WS2003/DBS-bayer/kap6-sql4-6.vier.pdf
    (seite 31)

    wenn du das öfter verwenden willst musst du ein create view machen.

    nicht haun wenn ich falsch liege... ich hab da noch nicht sooo viel mit gemacht.



  • Leider erfüllt dein Statement jeder Datensatz der Tabelle 😉

    Trotzdem nebenher wieder was gelernt.

    Netterweise habe ich noch einen Primärschlüssel
    so "...AND a.id<>b.id".

    Vielen Dank für deine Inspiration. 🙂



  • Das müßte über Unterabfragen zu machen sein.

    Select xyz from tabelle where abcd <> (Select 123 from tabelle)

    Bei dem Select in der Klammer holst Du Dir erst mit unique nur die 1. Datensätze sowohl von den doppelten als auch die nur einfach vorkommen.
    Mit dem "Select xyz" holst Du die Datensätze, die doppelt sind. D.h. in der ersten Abfrage nicht vorhanden sind.

    Unter informix-sql habe ich vor Jahren schon Unterabfragen auf einem Unix-Rechner gemacht.
    Mit Delphi oder C++-Builder bisher noch nicht. Deshalb kann ich Dir auch nicht die genaue Syntax sagen.

    Ich weiss auch nicht genau ob das "<>" stimmt. Kann auch "!=" sein.
    Unter informix hiess es "NOT IN". Musst Du einfach ein bischen probieren.



  • @aheim!
    Ebenfalls vielen Dank!

    Unterabragen funktionieren nicht bei allen DBMS.
    Aber es ist eine Lösung :).

    Bin mit 'JOIN mit rationalen Algo' bereits erfolgreich gewesen.


Log in to reply