SQL Wählen Sie alle Zeilen aus, in denen Teilmenge existiert
Ich bin sicher, es ist eine Antwort vorhanden für diese Frage, aber Geduld mit mir, wie ich bin neu in SQL und bin mir nicht sicher wie die Frage zu stellen.
Ich habe die Daten so aus (dies ist die Kurzform rein zum Beispiel).
Dies ist in einer postgres-db.
table1
id value
1 111
1 112
1 113
2 111
2 112
2 116
3 111
3 122
3 123
4 126
5 123
5 125
6 111
6 112
6 116
table2
value
111
112
116
Muss ich zurück die id der Tabelle1, wo alle Werte in Tabelle2 vorhanden sind, in der Werte von Tabelle1. Also, für dieses Beispiel, meine Abfrage zurückgeben würde, 2 und 6.
Gibt es eine Möglichkeit, dies zu tun in SQL? Oder könntest du mir den guide mal eine Daten-Struktur, die erlauben würde, für mich, um dieses Ergebnis? Ich bin in der Lage, ändern Sie die Struktur der beiden Tabellen, um Platz für die ultimate brauchen, um dieses Ergebnis
Danke Ihnen so sehr. Eine Antwort auf diese wäre ein Lebensretter sein.
- Sieht für mich wie die Antwort von @ErwinBrandstetter hat schon "das Leben retten". Könntest du bitte beachten, es zu akzeptieren als die richtige Antwort oder Kommentar über Probleme mit dieser Antwort.
- Finden Sie diese Frage mit verschiedenen Möglichkeiten zur Lösung dieses relationale division problem: stackoverflow.com/questions/7364969/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten dieser demo:
Ergebnis:
Liefert alle ids der
table1
angezeigt mit allen Werten zur Verfügung gestellt vontable2
einmal.Funktioniert für eine beliebige Anzahl von Zeilen in beiden Tabellen.
Wenn doppelte Zeilen angezeigt werden können, in
table1
machen, dass:Scheint es mir, dass so viel wie alles, was Sie wissen wollen, wie die richtige Frage zu stellen. Die magischen Worte hier sind "relationale division".
Es ist einer der Operatoren in Codd's relationale algebra und es wurden mehrere Varianten vorgeschlagen, da. Zuletzt Chris Datum vorgeschlagen hat, ersetzen das ganze Konzept mit Bild-Beziehungen.
SQL hat keine explizite divide-operator. Es gibt eine Reihe von workarounds mit anderen Betreiber und der am besten geeignet ist, hängt von Ihren Anforderungen, einschließlich der genauen Teilung oder division mit Rest und wie Sie zu behandeln eine leere divisor. Dann gibt es die üblichen überlegungen: SQL-Produkt und die version, die Leistung, den persönlichen Stil und Geschmack, etc.
Hier sind ein paar Artikel, die Ihnen helfen sollen, mit diesen Möglichkeiten:
Auf Die Herstellung Relationale Division Nachvollziehbar
Divided we Stand: Die SQL der Relationalen Division
UPDATE eine Andere Möglichkeit:
Die Kosten für meine Antwort, wenn Sie ERKLÄREN, ANALYSIEREN ist immer 893-900, auch bei wiederholten Zeilen.
(7, 111)
Zeile in die OP ' s Beispiel würde der Ausgang enthaltenid
7
, obwohl es keine(7, 112)
und(7, 116)
Zeilen.NICHT EXISTIERT(... NICHT VORHANDEN) ist eine standard Lösung für relationale division:
In diesem Fall, die
DISTINCT
ist erforderlich, weil wir keinen Zugang zu den domain Tabelle mitid
s, nur um die Kreuzung Tabellet1
darauf zu verweisen.