Nick: wheri in all

Beitrag lesen

Idee, sofern die Zuordnungen unique sind:
SELECT a FROM Tabelle WHERE b IN (1,3,4) GROUP BY a HAVING COUNT(a)=3

Die Idee mit count() hatte ich auch, aber nicht als Bedingung in having, sondern als select count. Damit kam ich nicht weiter, außer dass ich wusste, wie oft jeweils ein a vorkam. Dein Weg funktioniert, ich bin da wohl etwas aus SQL raus, daher vielen Dank.

Um noch in der verknüpften Tabelle an die Datensätze mit a zu kommen, benötigt man noch so etwas:

select * from vTabelle where a in (SELECT a FROM Tabelle WHERE b IN (1,3,4) GROUP BY a HAVING COUNT(a)=3)

Das war mein zweiter Fehler, ich hatte nicht in, sondern =. Das eine nennt man wohl skalar, das andere vektoriell.

So geht es jetzt jedenfalls, ich empfinde die Lösung allerdings als unsauber, vielleicht gibt es noch eine andere.

Noch eine Frage. Wenn man in() dynamisch befüllt, so funktioniert das nur, wenn mindestens ein Argument an in() übergeben wird, sonst kommt es zu einem Fehler. Das ist relativ mühsam bei der Programmierung zu beachten. Gibt es da noch eine andere Lösung? Vielleicht etwas mit if? Intuitiv dächte ich, in(), also leer, sollte kein Problem sein, liefert eben keine Ergebnisse, aber SQL sieht das anders.

In die ähnliche Richtung ginge noch die Frage, wie man die 3 aus count(a) mit SQL selbst ermittelt, wenn das überhaupt funktioniert