ORACLE: mehrere Spalte Unterabfragen

Dies ist von Oracle Database 10g: SQL-Grundlagen.
Original-Oracle-lehrbuch.
Francly sprechen, dies alles ist tatsächlich so weit.

Es ist eine Aufgabe, die mich beunruhigt:

Anzeige der Nachname, Abteilung, name und Gehalt jedes Mitarbeiters, dessen Gehalt und Kommission übereinstimmen, das Gehalt und die Kommission der vielen Mitarbeiter, die sich in Standort-ID 1700.

Dem Thema gelernt werden soll, mehrere Spalte Unterabfragen. Dies bedeutet, dass können wir nicht abweichen von dem angebotenen Modell:

SELECT column, column, ...
FROM table
WHERE (column, column, ...) IN
(SELECT column, column, ...
FROM table
WHERE condition);

Gut, meine Datenbank:

describe employees
Name           Null     Type         
-------------- -------- ------------ 
EMPLOYEE_ID    NOT NULL NUMBER(6)    
FIRST_NAME              VARCHAR2(20) 
LAST_NAME      NOT NULL VARCHAR2(25) 
EMAIL          NOT NULL VARCHAR2(25) 
PHONE_NUMBER            VARCHAR2(20) 
HIRE_DATE      NOT NULL DATE         
JOB_ID         NOT NULL VARCHAR2(10) 
SALARY                  NUMBER(8,2)  
COMMISSION_PCT          NUMBER(2,2)  
MANAGER_ID              NUMBER(6)    
DEPARTMENT_ID           NUMBER(4)    

describe departments
Name            Null     Type         
--------------- -------- ------------ 
DEPARTMENT_ID   NOT NULL NUMBER(4)    
DEPARTMENT_NAME NOT NULL VARCHAR2(30) 
MANAGER_ID               NUMBER(6)    
LOCATION_ID              NUMBER(4)  

Gibt es eine Lösung:

select
  e.last_name,
  d.department_name, 
  e.salary
from employees e, departments d
where e.department_id = d.department_id
and (salary, nvl(commission_pct, 0)) in
  (select salary, nvl(commission_pct, 0)
   from employees e, departments d
   where e.department_id = d.department_id
   and d.location_id = 1700);

AUSGEWÄHLTEN 36 ZEILEN.

Gut, ich begann die überprüfung. Es scheint, dass Mitarbeiter vom Standort 1700 dupliziert gegen sich selbst.
Schauen Sie: wir übernehmen die gesamte Liste der Mitarbeiter und dann konfrontieren Sie mit den Mitarbeitern vom Standort 1700. Natürlich gibt es Duplikate.

Vorbereitet habe ich eine excel-Datei mit einigen Daten (alle Mitarbeiter, Mitarbeiter aus der Standort-1700, das Ergebnis meiner eigenen gewünschten Ergebnis etc.). In der Datei, es ist malerischer, mit Beispielen und so weiter. Bitte haben Sie einen Blick.

Dies ist die Datei: https://skydrive.live.com/redir?resid=8CDFFBA921B002FE!150&authkey=!ADMRAE466BIunQM

Gut, was ich tun möchte, ist zu kontrollieren, dass kein Mitarbeiter ist im Vergleich mit sich selbst.
Dies war meine Variante bevore ich habe die Lösung.

select lnme, dpt, slry 
from
(
  select       
      employee_id eid,
      last_name lnme, 
      salary slry, 
      nvl(commission_pct,0) cpct,
      d.department_name dpt,
      location_id
  from employees e
  left join departments d
  on e.department_id = d.department_id
)
where (slry, cpct) in
(select 
    employee_id ide,
    salary slry, 
    nvl(commission_pct,0) cpct    
from employees e
join departments d
on e.department_id = d.department_id and location_id = 1700)
and ide <> eid

Wollte ich sicherstellen, dass kein Mitarbeiter ist im Vergleich mit dem gleichen Mitarbeiter. Aber ich konnte nicht.

Könnte Sie kommentieren alle diese situation:
1. Ob ich völlig falsch und die Lösung von Oracle ist perfekt.
2. Wenn Oracle ist falsch, könnten Sie mir helfen mit diesem code?

Vielen Dank im Voraus.

InformationsquelleAutor Pepperwork | 2013-01-26
Schreibe einen Kommentar