2013-03-21 4 views
1

Привет, это структура базы данных.Сведения о сотрудниках, которые не отображаются должным образом

employee (employee-name, street, city) 
works (employee-name, company-name, salary) 
company (company-name, city) 
manages (employee-name, manager-name) 

Мне нужно, чтобы получить подробную информацию, но в соответствии с моим тренером, что это неправильно может any0ne сказать мне, что случилось в следующих запросах?

Найти имена, адреса и города проживания всех сотрудников , которые работают в First Bank Corporation и зарабатывают более 10 000 долларов США.

SELECT e.employee-name, e.city 
FROM employee e 
INNER JOIN works w 
ON e.employee-name = w.employee-name 
AND w.company-name = “First Bank Corporation” 
GROUP BY e.employee-name 
HAVING w.salary > 10000 

Найти всех сотрудников в базе данных, которые живут в тех же городах, как компании , для которых они работают.

SELECT e.employee-name 
FROM employee e 
INNER JOIN works w 
ON e.employee-name = w.emploee-name 
INNER JOIN company c 
ON w.company-name = c.company-name 
GROUP BY e.employee-name 
HAVING e.city = c.city 

Найти все сотрудник в базе данных, которые живут в одних и тех же городах и на же улицах, как это делают их менеджер.

SELECT employee-name, street, city 
FROM employee 
INTERSECT 
SELECT e.employee-name, e.street, e.city 
FROM employee e, manages m 
WHERE e.employee-name = m.manager-name 
+0

+1 к каждому 1, голосовавшие меня ... :) – 2013-03-21 09:28:29

ответ

2

Чтобы избежать синтаксических ошибок в операторе, оберните имя столбца который содержит нелистовые символы (как знак минуса, пробелы, ...) с обратным шагом.

Первый запрос,

SELECT e.`employee-name`, e.city 
FROM employee e 
     INNER JOIN works w 
      ON e.employee-name = w.employee-name 
WHERE w.`company-name` = 'First Bank Corporation' AND 
     w.salary > 10000 

Во-вторых,

SELECT e.`employee-name` 
FROM employee e 
     INNER JOIN works w 
      ON e.`employee-name` = w.`employee-name` 
     INNER JOIN company c 
      ON w.`company-name` = c.`company-name` 
WHERE e.city = c.city 

В-третьих,

SELECT emp.* 
FROM Manages a 
     INNER JOIN employee man 
      ON a.`manager-name` = man.`employee-name` 
     INNER JOIN employee emp 
      ON a.`employee-name` = emp.`employee-name` 
WHERE man.city = emp.city AND 
     emp.street = man.street 
1

Вы должны использовать статьи WHERE.

Найдите имена, адреса улиц и города проживания всех сотрудников, которые работают в First Bank Corporation и зарабатывают более 10 000 долларов США.

SELECT e.`employee-name`, e.street, e.city 
FROM employee e 
INNER JOIN works w ON e.`employee-name` = w.`employee-name` 
WHERE w.company-name = "First Bank Corporation" 
AND w.salary > 10000 

Используйте ИНЕКЕ и не GROUP BY и HAVING.

Найти всех сотрудников в базе данных, которые живут в тех же городах, что и компании, в которых они работают.

SELECT e.`employee-name` 
FROM employee e 
INNER JOIN works w ON e.`employee-name` = w.`employee-name` 
INNER JOIN company c ON w.`company-name` = c.`company-name` 
WHERE e.city = c.city 

Найти всех сотрудников в базе данных, которые живут в тех же городах и на тех же улицах, что и их менеджеры.

SELECT m.`employee-name` 
FROM manages m 
INNER JOIN employee e ON e.`employee-name` = m.`employee-name` 
INNER JOIN employee manager ON manager.`employee-name` = m.`manager-name` 
WHERE e.street = manager.street 
AND e.city = manager.city 
+0

Могу ли я узнать, почему я получил downvoted? – LaGrandMere

+0

Я почти опустил вас, потому что все ваши ответы вызывают синтаксическую ошибку. вы не разделили имена столбцов, которые содержат '-'. Mysql выполняет арифметическую операцию над столбцом. 'e.employee-name' =' e.employee минус имя', если эти столбцы не найдены в таблице, сервер будет иметь неизвестное имя столбца. –

+0

В последнем запросе он должен быть 'm.street' не' manager.street'. –

-1

Вот как я бы решить первые один:

SELECT employee-name, street, city 
FROM employee 
WHERE employee-name = (
SELECT employee-name 
FROM works where company-name = "First Bank Corporation" 
AND salary > 10000) 

Если вам нужна помощь с остальными просто скажите мне

+1

Это довольно неэффективно - лучше делать внутреннее соединение. –

+0

Правда, мне всегда не нравилось использование ключевого слова JOIN: p –

+2

Это очень простая причина, и это все! –

0

Вы можете решить первые 2 с помощью WHERE вместо GROUP BY и HAVING. Первый один:

SELECT e.employee-name, e.city 
FROM employee e 
INNER JOIN works w 
ON e.employee-name = w.employee-name 
WHERE w.company-name = “First Bank Corporation” 
AND w.salary > 10000 

Второй один:

SELECT e.employee-name 
FROM employee e 
INNER JOIN works w 
ON e.employee-name = w.employee-name 
INNER JOIN company c 
ON w.company-name = c.company-name 
WHERE e.city = c.city 
Смежные вопросы