schwierige Abfrage - mySQL
mixmastertobsi
- datenbank
0 dedlfix
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...
Tach!
ARTIKEL-ID | ATTRIBUT
1 | L
1 | Blau
2 | L
2 | ROT
3 | L
3 | BlauIch 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.
Hallo,
also ausgeben soll MySQL
Artikel-ID
----------
1
3
ich werf mal ein paar Stichworte in den Raum: Cross-Self-Join, Unterabfragen, COUNT und HAVING :-)
1 und 3 haben
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
ALso ganz ehrlich - ich komme nicht drauf.
Kannst Du mir bitte ein Beispiel machen...
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
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