mixmastertobsi: schwierige Abfrage - mySQL

Hallo,

habe ein Problem mit einer Abfrage

Folgende Tabelle

Attribut

ARTIKEL-ID | ATTRIBUT
---------------------
1          | L
1          | Blau
2          | L
2          | ROT
3          | L
3          | Blau

Ich möchtge jetzt, dass MySQL nur die Zeilen ausgibt, bei welchen das Attribut "doppelt" vorkommt. Habe echt keine Ahnung, wie ich da am besten vorgehe...irgendwie müssen die Zeilen gruppiert und doppelte gezählt werden...

  1. Tach!

    ARTIKEL-ID | ATTRIBUT

    1          | L
    1          | Blau
    2          | L
    2          | ROT
    3          | L
    3          | Blau

    Ich möchtge jetzt, dass MySQL nur die Zeilen ausgibt, bei welchen das Attribut "doppelt" vorkommt.

    Definiere bitte erst einmal genau, was du als doppelt ansiehst und wie das Ergebnis aussehen soll. Für den ersten Teil nehme ich an, dass du Blau und L meinst. Oder zählt das L nicht, weil es dreifach enthalten ist?

    dedlfix.

    1. Hallo,

      also ausgeben soll MySQL

      Artikel-ID
      ----------
      1
      3

      1. ich werf mal ein paar Stichworte in den Raum: Cross-Self-Join, Unterabfragen, COUNT und HAVING :-)

        1 und 3 haben

        • dieselbe Anzahl an Attributen (2)
        • und fuer jedes Attribut auch noch die selben Werte

        eine systematische vorgehensweise waere: vergleiche 1 mit 2, 1 mit 3, 2 mit 3, daher unter anderem der Cross Join

        Vergleiche dabei die anzahl der Attribute fuer sich selbst (2) und die anzahl der uebereinstimmenden attribute (diese zahl sollte gleich der vorigen zahl sein)

        Cheers, Frank

        1. ALso ganz ehrlich - ich komme nicht drauf.

          Kannst Du mir bitte ein Beispiel machen...

          1. select [Artikel-ID] from Test  
            	where Attribut in(  
            		select attribut from Test  
            			group by Attribut  
            			having count(attribut)>1  
            		)
            

            Ungetestet wie ich es in mssql machen würde.

            Gruss
            Matze

          2. Habe leider keine Zeit um dir was auf dem Silbertablett zu servieren, es ist Monatsende und die Jungs vom Trading Desk geben einen aus (noch 2 Stunden bis dahin). :-)

            Aber is doch einfach .. ein Query SELECT Id, COUNT(*) AS COUNTED.... GROUP BY Id
            Darauf einen CROSS JOIN mit sich selbst   SELECT  FROM (letzte abfrage) a, (letzte abfrage) b WHERE NOT a.Id = b.Id

            das verbastelst du verschachtelt in eine korrelierende unterabfrage wo du die anzahl der uebereinstimmenden Attribute ermittelst und mit a.COUNTED und b.COUNTED vergleichst

            Schreib dir einfach alle einzelnen abfragen erstmal separat auf und dann setzt du die zusammen.
            Cheers, Frank