MYSQL РЕГИСТРИРУЙТЕСЬ заявления не возвращает то, что я хотел

голоса
2

Я хочу, чтобы отобразить «FULL JOIN» из двух таблиц, но с помощью посредника с внешними ключами, чтобы создать спички.

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

Проблема с этим запросом является то, что второй, «RIGHT JOIN» отменяет первое «LEFT JOIN». Все мои попытки в «FULL JOIN» во второй раз не удалось. (1064 ошибка синтаксиса, реальная описательный)

SELECT EMP_LNAME, EMP_FNAME, Project.PROJ_NAME
FROM Employee1
LEFT JOIN Assignment ON Employee1.EMP_CODE = Assignment.EMP_CODE
FULL JOIN Project ON Assignment.PROJ_CODE = Project.PROJ_CODE
ORDER BY Employee1.EMP_LNAME /* Syntax error */

Второй тип я попытался

SELECT EMP_LNAME, EMP_FNAME, Project.PROJ_NAME
FROM Employee1
LEFT JOIN Assignment ON Employee1.EMP_CODE = Assignment.EMP_CODE
RIGHT JOIN Project ON Assignment.PROJ_CODE = Project.PROJ_CODE
ORDER BY Employee1.EMP_LNAME /* Right join overwrites original left join */
Задан 13/11/2010 в 20:15
пользователем
На других языках...                            


2 ответов

голоса
3

Чтобы получить FULL OUTER JOIN в MySQL необходимо сначала выполнить LEFT JOIN, а затем RIGHT JOIN и UNION ALL результаты (или вместо того, RIGHT JOIN реверс таблиц и использовать другой LEFT JOIN). Но одна вещь, чтобы быть осторожным в том, что во втором присоединюсь к вам нужно удалить строки, для которых удается присоединиться, так что вы не получаете дубликаты в результате.

SELECT EMP_LNAME, EMP_FNAME, Project.PROJ_NAME
FROM Employee1
LEFT JOIN Assignment ON Employee1.EMP_CODE = Assignment.EMP_CODE
LEFT JOIN Project ON Assignment.PROJ_CODE = Project.PROJ_CODE
UNION ALL
SELECT EMP_LNAME, EMP_FNAME, Project.PROJ_NAME
FROM Project
LEFT JOIN Assignment ON Assignment.PROJ_CODE = Project.PROJ_CODE
LEFT JOIN Employee1 ON Employee1.EMP_CODE = Assignment.EMP_CODE
WHERE Employee1.ID IS NULL
ORDER BY EMP_LNAME

Я предполагаю , что здесь , что ваша Employee1таблица имеет поле идентификатора вызова , который не обнуляемый.

Ответил 13/11/2010 в 20:19
источник пользователем

голоса
2

MySQL не поддерживает «FULL» в это JOIN синтаксис , что вы после того, как конкретно называется FULL OUTER JOIN .

Это один из способов , чтобы получить вывод , который вы желаете :

    SELECT e.emp_lname,
           e.emp_fname,
           p.project_name
      FROM EMPLOYEE e
 LEFT JOIN ASSIGNMENT a ON a.emp_code = e.emp_code
      JOIN PROJECT p ON p.proj_code = a.proj_code
UNION
   SELECT e.emp_lname,
           e.emp_fname,
           p.project_name
      FROM EMPLOYEE e
RIGHT JOIN ASSIGNMENT a ON a.emp_code = e.emp_code
      JOIN PROJECT p ON p.proj_code = a.proj_code
ORDER BY emp_lname
Ответил 13/11/2010 в 20:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more