Ich habe einige Datensätze in ang1 zu finden:Um Teilmenge von Daten in Oracle
SELECT distinct
substrb(emp.employee_NAME,1,50) employee_NAME
FROM employee emp , employee_sites sites , (SELECT DISTINCT employee_id ,
emp_site_number
FROM abc
) abc
where emp.employee_id = sites.employee_id
and abc.employee_id=emp.employee_id
and abc.emp_site_number = sites.emp_site_number ;
und einige Datensätze in emp:
SELECT distinct emp.employee_NAME employee_NAME
FROM employee emp
WHERE 1=1 and EXISTS
(SELECT 1 FROM employee_ACCOUNTS acc WHERE acc.employee_id = emp.employee_id
)
rowcount von emp: 205001 rowcount von ang1: 18003
Ich möchte herausfinden, ob emp alle Datensätze von emp1 hat, mit anderen Worten, wenn emp ist superset von emp1. Ich habe versucht, diese:
select count(*) from (SELECT distinct emp.employee_NAME employee_NAME
FROM employee emp
WHERE 1=1 and EXISTS
(SELECT 1 FROM employee_ACCOUNTS acc WHERE acc.employee_id = emp.employee_id
)) emp ,
(SELECT distinct
substrb(emp.employee_NAME,1,50) employee_NAME
FROM employee emp , employee_sites sites , (SELECT DISTINCT employee_id ,
emp_site_number
FROM abc
) abc
where emp.employee_id = sites.employee_id
and abc.employee_id=emp.employee_id
and abc.emp_site_number = sites.emp_site_number) emp1
where emp.employee_NAME = emp1.employee_NAME ;
Rowcount für die obige Abfrage: 12360. So habe ich festgestellt, dass emp keine Obermenge von ang1 ist
Jemand lassen Sie es mich wissen, was ich getan habe, ist in Ordnung oder es braucht etwas Modifikation. Teilen Sie uns bitte auch mit, wenn Sie etwas Besseres wissen.
Dank
Ich mag Anti-Joins nicht so sehr. Ich finde sie weniger lesbar als die geradlinigen 'NOT EXIST' und' NOT IN'. Ich vermute, das ist der Grund, warum Sie die beiden Tabellen in der zweiten Abfrage verwechselt haben :-) Wie auch immer, von allen Methoden finde ich 'MINUS' am saubersten, und es wäre auch meine erste Annäherung. –