Die Where-Klausel, um zu überprüfen, gegen zwei Spalten in einer anderen Tabelle
Ich bin kämpfen, um diese Antwort für einige Grund.
Ich habe zwei Tabellen, Tabelle1 und Tabelle2, die wie folgt Aussehen:
Tabelle1:
ID Location Warehouse
1 London Narnia
2 Cyprus Metro
3 Norway Neck
4 Paris Triumph
Tabelle2:
ID Area Code
1 London Narnia
2 Cyprus Metro
3 Norway Triumph
4 Paris Neck
Brauche ich, um wählen Sie zunächst alles aus Tabelle1 wo table1.Location
ist in table2.Area
UND table1.Warehouse
ist in table2.Code
GEGEBEN, DASS table1.Location
ist in table2.Area
. I. e. Ich will:
ID Location Warehouse
1 London Narnia
2 Cyprus Metro
Habe ich:
select
1.location
, 1.warehouse
from table1 1
where 1.location in (select area from table2)
and 1.warehouse in (select code from table2)
Aber das wird nicht funktionieren, da muss ich die zweite where-Klausel ausgeführt werden, basierend auf der ersten where-Klausel festzuhalten.
Habe ich auch schon versucht ähnliche Abfragen mit joins ohne Erfolg.
Gibt es eine einfache Möglichkeit, dies zu tun?
InformationsquelleAutor Johnathan | 2015-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
exists
:Sollte ich darauf hinweisen, dass einige Datenbanken unterstützen Zeile Konstruktoren mit
in
. Das können Sie tun:InformationsquelleAutor Gordon Linoff
Vielleicht bin ich etwas fehlt, aber ein einfacher join mit zwei Bedingungen geben würde, Sie das Ergebnis in deinem Beispiel:
Ergebnis:
Beispiel-SQL Fiddle
Wenn es gibt eine million Zeilen die einzige plausible Erklärung ist, dass Sie eine million Zeilen passend zu den Bedingungen, die in der zweiten Tabelle. Könnte man ändern, wählen Sie:
select distinct t1. location, t1.warehouse
um Duplikate eliminieren, aber ich würde denken, dass die Antwort von Gordon Linoff besser geeignet sein könnten in Ihrem Fall.Die zweite Tabelle hat nur 3500 Zeilen, so ist es seltsam. Ich habe markiert der Antwort von @Gordon unten, wie es ist, immer die Ergebnisse, die ich brauche.
InformationsquelleAutor jpw
Müssen Sie
JOIN
.Ich werde entwerfen Sie die Abfrage in eine Weile 🙂
EDIT:
Vielleicht, weil Sie haben das duplizieren von Zeilen in einer oder beiden Tabellen und das führt zu einem kartesischen Produkt.
InformationsquelleAutor StoYan