mySQL - datensätze mit einer id die weniger als x mal vorkommt
Hilker
- datenbank
2 Cheatah0 Hilker0 Vinzenz Mai0 Tom
1 Vinzenz Mai0 hilker
Hi Forum!
Hat von Euch jemand ne Ahnung, ob es irgendwie möglich ist, in einer Tabelle alle Datensätze die in einer Spalte ID weniger als X Mal den selben Wert enthalten zu finden?
Ich kann irgendwie nichtmal nen Ansatz finden um das Problem anzugehen.
Gruß und Danke für Vorschläge und Hilfestellungen,
Markus
Hi,
Ich kann irgendwie nichtmal nen Ansatz finden um das Problem anzugehen.
der Ansatz lautet GROUP BY mit HAVING.
Cheatah
der Ansatz lautet GROUP BY mit HAVING.
OK, Danke! Das Resultat sieht nun wie folgt aus:
SELECT bt1.col1, bt1.id
FROM table1 bt1
JOIN table1 bt2
ON bt1.id = bt2.id
GROUP BY bt2.id HAVING count(bt2.id) < 10
findet alles <10 vorkommen.
Irgendwas zu meckern, oder hab ich's richtig verstanden?
Gruß,
Hallo
OK, Danke! Das Resultat sieht nun wie folgt aus:
SELECT bt1.col1, bt1.id
FROM table1 bt1
JOIN table1 bt2
ON bt1.id = bt2.id
GROUP BY bt2.id HAVING count(bt2.id) < 10findet alles <10 vorkommen.
Irgendwas zu meckern, oder hab ich's richtig verstanden?
Ja, das akzeptiert höchstens MySQL und das Ergebnis kann zufällig sein.
Du solltest nach _allen_ Spalten gruppieren, auf die Du _keine_ Aggregatsfunktion anwendest. Jedes andere DBMS als MySQL weist sonst Deine Abfrage als syntaktisch fehlerhaft zurück.
In deinem speziellen Fall sollte col1 direkt von id abhängen, so dass es vom Ergebnis her keinen Unterschied machen dürfte.
Freundliche Grüße
Vinzenz
Hello,
Du solltest nach _allen_ Spalten gruppieren, auf die Du _keine_ Aggregatsfunktion anwendest. Jedes andere DBMS als MySQL weist sonst Deine Abfrage als syntaktisch fehlerhaft zurück.
Nur so aus Interesse am Sprachsinn nachgefragt:
Ist das dann wirklich _syntaktisch_ falsch, oder wäre es nicht eher _semantisch_ falsch? Bezieht sich denn die Syntax einer SQL-Abfrage auch auf deren Sinn, oder nicht eher nur auf die richtige Schreibweise (und Reihenfolge) der Begriffe?
Ein harzliches Glückauf
Tom vom Berg
Hallo
Du solltest nach _allen_ Spalten gruppieren, auf die Du _keine_ Aggregatsfunktion anwendest. Jedes andere DBMS als MySQL weist sonst Deine Abfrage als syntaktisch fehlerhaft zurück.
Nur so aus Interesse am Sprachsinn nachgefragt:
Ist das dann wirklich _syntaktisch_ falsch,
Ja. Die SQL-Syntax verlangt das explizite Aufführen aller Spalten, die keine Aggregatsfunktion enthalten, in der GROUP-BY-Klausel. Das Fehlen einer solchen Spalte ist somit ein Syntax-Fehler und die Abfrage wird schon aus rein formalen Gründen als falsch zurückgewiesen.
Freundliche Grüße
Vinzenz
Hallo
Hat von Euch jemand ne Ahnung, ob es irgendwie möglich ist, in einer Tabelle alle Datensätze die in einer Spalte ID weniger als X Mal den selben Wert enthalten zu finden?
Diese IDs ermittelst Du mit COUNT(), GROUP BY und der HAVING-Klausel
Ich kann irgendwie nichtmal nen Ansatz finden um das Problem anzugehen.
Für die anzuzeigenden Datensätze nimmst Du ein Subselect.
SELECT -- Gib mir
<spaltenliste> -- die Datensätze
FROM -- aus meiner
<tabelle> -- Tabelle,
WHERE -- deren
id IN ( -- id in der
SELECT -- Liste der
id -- ids
FROM -- aus der
<tabelle> -- Tabelle vorkommt
GROUP BY
id
HAVING
COUNT(id) < <maximalwert> -- deren Anzahl des Vorkommens unter Deinem
) -- Vorgabewert liegt
Sollte in MySQL 4.1.x und neuer funktionieren :-)
Freundliche Grüße
Vinzenz
Diese IDs ermittelst Du mit COUNT(), GROUP BY und der HAVING-Klausel
Ja, hab ich schon, allerdings mit self join ohne subselect.
trotzdem danke!
Gruß, Markus