2013-03-21 2 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 ... 난을 downvoted있어 이유 : –

답변

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 BYHAVING.

데이터베이스가 작동하는 회사와 같은 도시에 거주하는 모든 직원을 찾으십시오.

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

내가 알 수 있습니까? – LaGrandMere

+0

모든 답변으로 인해 구문 오류가 발생했기 때문에 나는 거의답지하지 못했습니다. '-'가 포함 된 열 이름을 구분하지 않았습니다. MySQL은 열에 대한 산술 연산을 수행합니다. 'e.employee-name' ='e.employee 빼기 이름'만약 테이블에 컬럼이 없다면, 서버는 알려지지 않은 컬럼 이름을 던질 것이다. –

+0

마지막 쿼리에서'manager.street'가 아닌'm.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

사용 WHERE 대신 GROUP BY 및 HAVING에 의해 처음 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 

두 번째 : 저를 투표마다 1

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 
관련 문제