ORACLE: plusieurs colonne de sous-requêtes

C'est à partir de la Base de données Oracle 10g: SQL Fundamentals.
Original Oracle manuel.
Francly parlant, tout cela est réel jusqu'à présent.

Il est une tâche qui me troublent:

Afficher le nom de famille, nom du département, et le salaire d'un employé dont le salaire et commission correspondre au salaire et à la commission de nombreuses employé situé dans un emplacement ID 1700.

Le sujet pour être appris, c'est à plusieurs colonnes sous-requêtes. Cela signifie que nous ne pouvons pas s'écarter de l'offre de modèle:

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

Bien, ma base de données:

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)  

Il existe une solution:

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);

SÉLECTIONNÉ 36 LIGNES.

Bien, j'ai commencé à vérifier. Il semble que les employés de l'emplacement de 1700 dupliqué contre eux-mêmes.
Regardez: nous prenons l'ensemble de la liste des employés et puis juxtaposer avec les employés de l'emplacement de 1700. Bien sûr, il y aura des doublons.

J'ai préparé un fichier excel avec des données (tous les employés, les employés de l'emplacement de 1700, le résultat de mes propres résultat souhaité, etc.). Dans le fichier, il est plus pittoresque, avec des exemples et ainsi de suite. S'il vous plaît, jetez un oeil.

C'est le fichier: https://skydrive.live.com/redir?resid=8CDFFBA921B002FE!150&authkey=!ADMRAE466BIunQM

Bien, ce que je voudrais faire est de contrôler qu'aucun employé n'est par rapport à eux-mêmes.
C'était ma variante bevore j'ai vérifié la solution.

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

Je voulais m'assurer qu'aucun employé est comparé avec le même salarié. Mais j'ai échoué.

Pourriez-vous commenter tous cette situation:
1. Si je suis complètement faux et la solution d'Oracle est parfait.
2. Si Oracle est mal, pourriez-vous m'aider avec ce code?

Vous en remercie d'avance.

InformationsquelleAutor Pepperwork | 2013-01-26