Перечислите имена всех женатых сотрудников и их супругов, которые назначены для проекта «East London Crossing» - PullRequest
0 голосов
/ 09 января 2019
Project   Table Pk(project Number)

Project Table

 Marriage Table : PK (EmployeeNumber)
 Fk_ Marriage - employee (spouseNumber) 

Marriage Table

Employee Table (EmployeeNumber) 

Employee Table

Workon Table : PK(EmployeeNumber,ProjectNumber,CityCode) 
              FK_ Workon - employee (EmployeeNumber)
              FK_ Workon - project (projectNumber)

Workon Table

1 Table : Project  pk(project Number)
2 Table : Marriage PK (EmployeeNumber) 
          Fk_ Marriage - employee (spouseNumber)
3 Table : Employee(EmployeeNumber) 
4 Table : Workon PK(EmployeeNumber,ProjectNumber,CityCode) 
          FK_ Workon - employee (EmployeeNumber)
          FK_ Workon - project (projectNumber)

   List the names of all married employees and their spouses who are assigned to the “East London Crossing” project

это возможно с присоединением, или нам нужно сделать больше, чем просто присоединиться к проблеме любви

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вам нужно использовать дважды для таблицы workon и employee, а также id

.
SELECT e1.FirstName
    , e1.LastName
    , e2.FirstName
    , e2.LastName 
FROM Project p
INNER JOIN  Workon w1 ON  p.projectNumber = w1.projectNumber 
INNER JOIN Workon W2 ON p.projectNumber = W2.projectNumber 
INNER JOIN Employee e1 ON  w1.employeeNumber = e1.EmployeeNumber
INNER JOIN Employee e2 ON W2.employeeNumber = e2.EmployeeNumber  
    AND e1.SpouseNumber = e2.EmployeeNumber
WHERE p.id = 2 
0 голосов
/ 10 января 2019

Эндрю Фан: я изменил твой код, насколько он хорош

SELECT E.EmployeeNumber,E.FirstName, E.LastName,
       E.SpouseNumber, w.projectNumber,P.name
       FROM Project P, Workon W, Employee E 
       WHERE P.projectNumber = W.projectNumber AND
             W.employeeNumber = E.EmployeeNumber  
             AND P.name = "East London Crossing" AND 
                 E.SpouseNumber is not NULL;
0 голосов
/ 09 января 2019

Эту проблему можно решить с помощью объединений - фактически, поскольку компоненты, которые вы хотите получить, находятся в отдельных таблицах, обычно требуется объединение.

Вам необходимо объединить таблицу Project с таблицами Employee и Workon. Таблица «Брак» по сути не имеет значения, поскольку ее информация уже присутствует в таблице «Сотрудник». В SQL это декартово произведение (FROM), где определенные ограничения применяются / выбираются (WHERE).

Например (при условии, что оба мужа и жена работают над ELC):

SELECT E1.FirstName, E1.LastName, E2.FirstName, E2.LastName 
FROM Project P, Workon W1, Workon W2, Employee E1, Employee E2
WHERE P.projectNumber = W1.projectNumber AND P.projectNumber = W2.projectNumber AND
    W1.employeeNumber = E1.EmployeeNumber AND W2.employeeNumber = E2.EmployeeNumber AND
    E1.SpouseNumber = E2.EmployeeNumber AND P.name = "East London Crossing";

(Примечание. Я не тестировал этот код, поэтому он может содержать синтаксические ошибки)

В качестве альтернативы вы можете использовать естественные объединения, в этом случае таблицы, такие как Project и Workon, можно объединять (например, Project NATURAL JOIN Workon).

...