2010-06-14 12 views
5

Ho una tabella comeAuto iscriverti per un tavolo

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

voglio ottenere tutti i dipendenti il ​​cui stipendio è maggiore di stipendio di un. Non voglio utilizzare alcuna query nidificata o secondaria. È stato chiesto in un'intervista e il suggerimento era di usare il self join. Non riesco davvero a capire come ottenere lo stesso.

risposta

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

Usando auto si uniscono

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

+1 per vecchia scuola. Bah, chi ha bisogno della parola chiave 'join'? :-) – paxdiablo

+0

grazie mille ... Stavo pensando in un modo complesso ... – Mohit

+0

Grazie mille. Spiegato in modo semplice – qasimzee

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

funzionerà. solo la modifica sarà mysql sono case sensitive quindi emp2.Name = 'A' dovrebbe essere emp2.Name = 'a' – Salil