Ich weiß, dass der Wortlaut der Frage peinlich ist, aber ich könnte es nicht besser ausdrücken. Lassen Sie mich die Situation erklären.Kann ich doppelte Ergebnisse (aus einer Tabelle) in einer INTERSECT-Operation zwischen zwei Tabellen erhalten?
Es gibt Tabelle A
, die eine Reihe von Spalten (a
, b
, c
...) und ich führen eine SELECT
Abfrage es etwa so:
SELECT a FROM A WHERE b IN ('....')
(die Auslassungspunkte eine Anzahl von Werten angibt zu sein abgestimmt auf)
gibt es einen anderen Tisch B
, die eine Reihe von Spalten (d
, e
, f
...) und ich führen eine SELECT
Abfrage es etwa so:
SELECT d FROM B WHERE f = '...'
(die Auslassungszeichen zeigt einen einzelnen Wert zu angepasst werden)
Jetzt soll ich hier sagen, dass die beiden Tabellen speichern verschiedene Arten von Informationen über die gleiche Einheit, aber die Spalten a
und d
enthalten die genau dieselben Daten (in diesem Fall eine ID). Ich mag den Schnittpunkt der beiden Tabellen, um herauszufinden, so dass ich laufe diese:
SELECT a FROM A WHERE b IN ('....') INTERSECT SELECT d FROM B WHERE f = '...'
Hier ist das Problem:
Die erste SELECT
enthält eine Reihe von Werten in der WHERE
Klausel, nicht wahr? Nehmen wir an, das Set ist (1234
, 2345
, 3456
). Nun ist das Ergebnis dieser Abfrage, wenn b
NUR zu 1234
abgestimmt ist, sagen wir abc
. Wenn es mit 2345
übereinstimmt, ist es def
, angenommen. Und passend zu 3456
gibt es abc
.
Nehmen wir an, diese beiden Ergebnisse (abc
und def
) sind auch in der Reihe der Ergebnisse von der zweiten SELECT
.
So, nun setzte die gesamte Gruppe von Werten zurück zum abgestimmt in die WHERE
Klausel, der INTERSECT
Betrieb mir abc
und def
geben. Aber ich möchte abc
zweimal, da zwei Werte in der WHERE
Klausel gesetzt, um die zweite SELECT
übereinstimmen.
Gibt es eine Möglichkeit, dass ich das bekommen kann?
Ich hoffe, es ist nicht zu kompliziert, mein Problem zu verstehen. Dies ist ein echtes Problem, dem ich in meinem Beruf gegenüber stehe.
Datenstruktur und mein Code
Tabelle A
enthält allgemeine Informationen über ein Unternehmen:
company_id | branch_id | no_of_employees | city
Tabelle B
enthält die Finanzwerte des Unternehmens:
company_id | branch_id | revenue | profits
Erste SELECT:
SELECT branch_id FROM A WHERE CITY IN ('Dallas', 'Miami', 'New Orleans')
nun jede Stadt separat im ersten SELECT
läuft, bekomme ich die branch_id
s:
branch_id | city
23 | Dallas
45 | Miami
45 | New Orleans
Wieder einmal scheint dies nicht praktikabel, wie zwei Städte die gleichen Zweig-IDs haben kann, aber Bitte ertragen Sie mich dabei.
Zweiter SELECT:
SELECT branch_id FROM B
WHERE REVENUE = 5000000
Ich weiß, dass dies ein wenig unpraktisch ist, aber für den Zweck dieses Beispiels genügt es.
Ausführen dieser Abfrage ich den folgenden Satz erhalten:
11
23
45
22
10
Also die INTERSECT
wird mir nur 23
und 45
. Aber ich will 45
zweimal, da sowohl Miami als auch New Orleans das branch_id
haben und das branch_id
einen Umsatz von 5 Millionen generiert hat.
Wahrscheinlich einfacher zu sezieren, wenn Sie einen Beispieldatensatz bereitstellen könnten.Sie haben es ausführlich erklärt, aber jeder muss den Datensatz gemäß Ihrer Erklärung erstellen. Dies wird sicherstellen, dass wir Ihre Daten nicht vermasseln, obwohl es Testdaten sind. – scsimon
Alter, beschreiben Sie keine Datensätze in Wörtern wie _ "hier ist der Wert A dann ein anderer Wert B und schließlich der Wert C" _. Es ist '(a, b, c)'. –