Announcement

Collapse
No announcement yet.

SQL aktive Mehrfacheinträge raus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL aktive Mehrfacheinträge raus

    Hallo zusammen,

    ich habe folgende Tabelle

    KundenID Abo aktiv
    -------------- ------ -------
    1 A nein
    2 A nein
    2 B ja
    3 C nein
    4 C nein
    5 A nein
    6 A nein
    6 C nein

    Ich möchte nur die inaktiven ermitteln, aber bei diesen auch nur die die kein zusätzliches Abo aktiv haben.
    Somit würden bei der Tabelle oben alle Kunden selektiert, ausser KundenID 2, weil da ja das Abo B aktiv ist.

    Nur wie löse ich das über einen Select?

    Bisher habe ich nur:

    SELECT * FROM tabelle group by KundenID having count(KundenID)>1

    Hier werden nur die selektiert, die mehrfach vorhanden sind. Bringt mich also gar nicht weiter.

    Hat jemand eine Idee?

    Gruß
    René

  • #2
    Habs nun so weit:

    select distinct(kundenid) from tabelle where aktiv='nein' and kundenID in(SELECT distinct(kundenid) FROM tabelle where aktiv='ja')

    Also zuerst die aktiven im Subselect auslesen und diese dann ausschließen. Was meint ihr? Wasserdicht?

    Comment


    • #3
      Hallo,
      Originally posted by rezwiebel View Post
      ...select distinct(kundenid) from tabelle where aktiv='nein' and kundenID in(SELECT distinct(kundenid) FROM tabelle where aktiv='ja')

      Also zuerst die aktiven im Subselect auslesen und diese dann ausschließen. Was meint ihr? Wasserdicht?
      Ja, ausschließen wäre gut, aber dann solltest du es auch machen! In deinem o.g. Statement kann ich keinen Ausschluss erkennen, dort werden die ermittelt, die zu einem inaktiven mindestens ein aktives Abo haben.

      Und dann wäre da noch die Syntax: DISTINCT ist ein Schlüsselwort - keine Funktion! Auch würde ich an der Stelle komplett auf DISTINCT verzichten, da es das Ergebniss nicht beinflusst und wahrscheinlich keinen Performancegewinn bringt.

      Und zum Schluss: Formatierung von SQL in Beiträgen

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        OK, habs scheinbar falsch gepostet. Eigentlich war der Code

        Code:
        select distinct kundenid from tabelle where aktiv='nein' and kundenID NOT in(SELECT distinct(kundenid) FROM tabelle where aktiv='ja')
        So müsste es passen oder?

        Distinct deshalb, weil ich sonst im realen Select doppelte Datensätze bekommen würde.

        Comment


        • #5
          Originally posted by Falk Prüfer View Post
          Und dann wäre da noch die Syntax: DISTINCT ist ein Schlüsselwort - keine Funktion!
          Gruß Falk
          hmm, Feldnamen kann man schon klammern, sieht natürlich im Zusammenhang mit DISTINCT verwirrend aus

          unter MS-SQL-Server geht jedenfalls das (aber wer macht schon sowas...)

          [HIGHLIGHT="SQL"]SELECT (Spalte1) , Spalte2, (Spalte3) FROM Tabelle
          [/HIGHLIGHT]

          Comment


          • #6
            Kein Thema, besser ich aus. Aber bin ich jetzt mit der Grundfunktion des SQLs auf dem richtigen Weg?

            Comment


            • #7
              @ebis
              Originally posted by ebis View Post
              hmm, Feldnamen kann man schon klammern, sieht natürlich im Zusammenhang mit DISTINCT verwirrend aus

              unter MS-SQL-Server geht jedenfalls das (aber wer macht schon sowas...)
              Ja, du hast natürlich recht, aber ich war mir ziemlich sicher das der TE hier eben nicht mal so den Feldnamen in Klammern schreiben wollte, sondern sich eher der von mir genannten Tatsache nicht bewusst war.
              Und mit zwei Spalten funktioniert es dann eben schon nicht mehr...

              @rezwiebel
              Originally posted by rezwiebel View Post
              Distinct deshalb, weil ich sonst im realen Select doppelte Datensätze bekommen würde.
              Nein, das DISTINCT im Subselect hat KEINEN Einfluss auf die Anzahl der DS des äusseren Selects.
              [highlight=sql]select <feld> from <tabelle> where id in (1,1,1,1)[/highlight]
              liefert dir genau EINEN DS (sofern es nicht mehrere mit id=1 gibt), egal wie oft du die 1 ins IN schreibst.

              Originally posted by rezwiebel View Post
              ...So müsste es passen oder?
              Wenn du die Besonderheiten von NOT IN als Umkehrung von IN beachtest, dann passt es.

              Und nochmal: Formatierung von SQL in Beiträgen

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                danke soweit. Müsste passen wie ich das sehe. Und ja, das mit dem distinct in Klammern war nur ein Versehen.

                Comment


                • #9
                  Originally posted by Falk Prüfer View Post
                  @ebis
                  Und mit zwei Spalten funktioniert es dann eben schon nicht mehr...
                  Sollte schon [HIGHLIGHT="SQL"]SELECT DISTINCT (Spalte1), (Spalte2) ...[/HIGHLIGHT]
                  erst so gehts nicht
                  [HIGHLIGHT="SQL"]SELECT DISTINCT (Spalte1, Spalte2) ...[/HIGHLIGHT]

                  Comment


                  • #10
                    Originally posted by ebis View Post
                    erst so gehts nicht
                    [HIGHLIGHT="SQL"]SELECT DISTINCT (Spalte1, Spalte2) ...[/HIGHLIGHT]
                    Das war auch gemeint. Der erstere Fall wäre auch kein Funktionsaufruf.
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X