2010-06-14 4 views
5

J'ai une table commeauto se joindre à une table

Employee 
================== 
name  salary 
================== 
a  10000 
b  20000 
c  5000 
d  40000 

je veux obtenir tous les employés dont le salaire est supérieur au salaire d'un. Je ne souhaite pas utiliser de requête imbriquée ou secondaire. Il a été demandé dans une interview et l'indice était d'utiliser self join. Je ne peux vraiment pas comprendre comment réaliser la même chose.

Répondre

16
select e1.* from Employee e1, Employee e2 where 
      e2.name = 'a' and 
      e1.salary > e2.salary 

utilisant l'auto rejoindre

select e1.* from Employee e1 join Employee e2 on 
      e2.name = 'a' and 
      e1.salary > e2.salary 
+1

+1 pour la vieille école. Bah, qui a besoin du mot-clé 'join'? :-) – paxdiablo

+0

merci beaucoup ... Je pensais d'une manière complexe ... – Mohit

+0

Merci beaucoup. Expliqué d'une manière simple – qasimzee

1
SELECT emp1.* FROM Employee emp1 JOIN Employee emp2 
ON emp2.Name = 'A' and emp1.Salary > emp2.Salary 
+0

cela va fonctionner. seule la modification sera mysql, sensible à la casse, donc emp2.Nom = 'A' devrait être emp2.Nom = 'a' – Salil