Ich muss den folgenden Code ändern, um nach Gruppen zu suchen, in denen eine Surv-Datei null ist und die andere nicht. Derzeit gibt die Abfrage Gruppen zurück, in denen beide Surv Daten enthalten sind. Ich suche alle Gruppen, in denen der Surv für einen Datensatz A nicht mit einer ID im anderen Datensatz B übereinstimmt, sondern nur in Fällen, in denen der Surv in Datensatz B null ist.Wie kann ich 2 verschiedene Datensätze basierend auf 2 verschiedenen Kriterien innerhalb einer Gruppe in Oracle vergleichen?
SELECT *
FROM MY_TABLE t3
WHERE t3.GROUP_id IN (
SELECT t1.GROUP_id
FROM MY_TABLE t1, MY_TABLE t2
WHERE t1.id <> t2.id
AND t1.GROUP_id = t2.GROUP_id
AND t1.id <> t2.surv
AND t2.id <> t1.surv
);
Dies ist die Rückkehr Unterschiede, wo beide Survlays sind ausgefüllt. Was vermisse ich?
edit:
---------------------------------
| group | id | surv |
----------------------------------
| 1 | 1 | null |
| 1| | 2 | 1 |
| 2 | 3 | 107 |
| 2 | 4 | null |
| 3 | 5 | 89 |
| 3 | 6 | 89 |
----------------------------------
Rückkehr
---------------------------------
| group | id | surv |
----------------------------------
| 2 | 3 | 107 |
| 2 | 4 | null |
----------------------------------
Grund: Gruppe 1 hat id 1 Treffer zu surv des zweiten Datensatzes; als solche wollen wir es nicht zurückgeben.
Gruppe 2, ID 3 hat einen Surv, der nicht mit der ID des anderen Datensatzes übereinstimmt. Zusammen damit ist das zweite Überlebensfeld null. Dies ist, was wir brauchen, zurückgekehrt.
Gruppe 3, beide haben ein Überleben von nicht null. Diese werden nicht benötigt.
bearbeiten 2: Ich kam schließlich mit dieser Abfrage nach oben:
SELECT cluster_id, oidmu, survoid
FROM MY_TABLE t3
WHERE t3.GROUP_id IN (
SELECT t1.GROUP_id
FROM MY_TABLE t1, MY_TABLE t2
WHERE t1.ID <> t2.ID
AND t1.GROUP_id = t2.GROUP_id
AND (t1.ID <> t2.SURV and t1.SURV is null)
);
Können Sie Ihre Frage bearbeiten und Beispieldaten und gewünschte Ergebnisse bereitstellen? –
@Gordon Linoff Das Original wurde aktualisiert. – user7002207