2015-11-17 2 views
1

Моя база данных:застрял на написание этого запроса, пытаясь использовать внутреннее соединение

EMPLOYEE (fmane, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno)  KEY: ssn 
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate)    KEY: dnumber. 
PROJECT (pname, pnumber, plocation, dnum)       KEY: pnumber. 
WORKS_ON (essn, pno, hours)           KEY: (essn, pno) 
DEPENDENT (essn, dependent-name, sex, bdate, relationship)    KEY: (essn, dependent-name) 

Я хочу, чтобы получить фамилию в браке сотрудников, не имеющих детей, используя внутреннее соединение

До сих пор я только пришел up with this:

SELECT E.* 
FROM Employee AS E INNER JOIN Dependent AS D 
ON (E.ssn = D.essn AND D.relationship IN ('husband','wife')) 

В любом случае, чтобы дать возможность корректировать мой код? Я хочу использовать внутреннее соединение, чтобы найти то, что хочу.

+0

Спасибо за ввод в том, что вы пробовали до сих пор, но это действительно помогло бы знать некоторые выборочные данные в таблицах/ваш ожидаемый результат и имя базы данных/версия – Utsav

+2

Какие СУБД вы используете? Postgres? Oracle? –

+0

Пожалуйста, ознакомьтесь с приведенным ниже ответом, спасибо. –

ответ

0

Edit: Еще один способ без использования минус

select e.lname from 
employee e inner join dependent d 
on e.ssn=d.essn 
where D.relationship IN ('husband','wife') 
and e.ssn not in (
    select e.ssn from 
    employee e inner join dependent d 
    on e.ssn=d.essn 
    where D.relationship IN ('child') 
) 

С минус

SELECT e.lname 
FROM Employee E 
INNER JOIN Dependent D 
ON E.ssn = D.essn 
where D.relationship IN ('husband','wife') 

minus 

select e.lname 
FROM Employee E 
INNER JOIN Dependent D 
ON E.ssn = D.essn 
where D.relationship IN ('child') --or children what ever you are using 
+0

Да. Я вижу это сейчас. Исправление. – Utsav

+0

'минус' является нестандартным SQL. Эквивалент ANSI SQL 'except' –

+0

Спасибо! Пробовал другой подход, используя 'not in' – Utsav

0

Попробуйте следующее. Внутренний запрос находит всех сотрудников, у которых есть только один зависимый, который может быть супругом или другим членом семьи. Затем я снова присоединяюсь к этому результату в таблице Dependent и ограничиваю, чтобы другой член семьи был мужем или женой.

SELECT e1.* 
FROM Employee e1 INNER JOIN 
(
    SELECT e2.ssn 
    FROM Employee e2 INNER JOIN Dependent d1 ON e2.ssn = d1.essn 
    GROUP BY e2.ssn 
    HAVING COUNT(*) = 1 
) t ON e1.ssn = t.ssn 
INNER JOIN Dependent d2 ON e1.ssn = d2.essn 
WHERE d2.relationship IN ('husband', 'wife') 
Смежные вопросы