2016-12-22 8 views
2

Ich brauche die name zu finden, function, officename und die salary alle Mitarbeiter mit der gleichen Funktion wie PETER oder einem Gehalt größer oder gleich als das Gehalt von SANDERS. Bestellung von function und salary.TROUBLE IN MEHRERE subselect QUERY

Es gibt zwei Tabellen: office und employee

Tabelle office enthält:

officenumber 

name 

city 

Tabelle employee enthält:

employeenumber 
name 
function 
manager 
sal 
officenumber 

dies ist meine aktuelle SQL-Abfrage:

SELECT NAME, 
     FUNCTION, 
     SAL 
FROM EMPLOYEE 
WHERE FUNCTIE = (SELECT  FUNCTION 
         FROM  EMPLOYEE 
         WHERE  NAME = 'PIETERS') 

Ich bin mit der Abfrage fest.

+0

hallo PM77-1, wie sieht die nächste Abfrage aussehen? Subselect für 'SANDERS' erstellen? –

+0

@ Rega, achten Sie darauf, die richtige Antwort zu markieren. –

Antwort

3

Angenommen, dies ist SQL Server (Sie nie angegeben), sollte so etwas funktionieren.

SELECT 
    e.name, 
    e.function, 
    e.sal, 
    o.name AS officename 
FROM employee e 
    JOIN office o ON e.officenumber = o.officenumber 
WHERE 
    e.function = (SELECT function FROM employee WHERE name = 'PIETERS') OR 
    e.sal >= (SELECT sal FROM employee WHERE name = 'SANDERS') 
ORDER BY e.function, e.salary 

Sie müssen dies ein wenig zwicken, wenn Sie mit MySQL oder etwas anderem arbeiten.

+0

Vielen Dank !! –

2

Drei Dinge, die Sie hier tun:
1. die beiden Tabellen verbinden, da Sie die Ergebnisse aus beiden Tabellen müssen die Ergebnisse
2. Filter nach den beiden Kriterien
3. Um die Ergebnisse:

der erste Teil ist einfach, müssen sie nur die officenumber nach beitreten:

select e.name, e.function, o.name as officeName, e.salary from 
    employee e inner join office o 
    on e.officenumber = o.officenumber 

zweiten Teil, einfach where-Klausel:

where e.function = (select function from employee where name = 'PETER') 
    or e.salary >= (select salary from employee where name = 'SANDERS') 

und die letzte, Bestellung:

order by e.function, e.salary 

setzen sie alle zusammen:

select e.name, e.function, o.name as officeName, e.salary from 
    employee e inner join office o 
    on e.officenumber = o.officenumber 
    where e.function = (select function from employee where name = 'PETER') 
    or e.salary >= (select salary from employee where name = 'SANDERS') 
    order by e.function, e.salary 
+0

Vielen Dank !! –

+0

Nir - Ich werde Ihren Beitrag bearbeiten, um einen Tippfehler (Verkauf) zu beheben und "wie" aus Tabellenaliasen zu entfernen. In Oracle dürfen Sie kein "as" zwischen einem Tabellennamen und seinem Aliasnamen verwenden. Sie können "as" zwischen einem Spaltennamen (oder einem Ausdruck, der als Spalte verwendet werden soll) und einem Spaltenalias verwenden. Dies ist eine gute Vorgehensweise, die jedoch nie erforderlich ist. aber für Tabellenaliase ist es einfach nicht erlaubt. Ich sehe, dass das DB-Produkt nicht bekannt war, als Sie dies schrieben, aber jetzt ist es, und es ist Oracle - Ich bearbeite Ihren Beitrag für zukünftige Besucher dieses Threads. – mathguy