1

こんにちは、これはデータベース構造です。

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

私は次の詳細を取得する必要がありますが、私のトレーナーによると、それは間違っています。次のクエリで何が間違っているのか教えてもらえますか?

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
4

4 に答える 4

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

2番、

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

第3、

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
于 2013-03-21T09:12:12.133 に答える
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

WHERE句を使用し、andではありませ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
于 2013-03-21T09:11:52.120 に答える
0

GROUP BYとHAVINGの代わりにWHEREを使用すると、最初の2つを解決できます。最初の1つ:

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
于 2013-03-21T09:16:00.400 に答える
-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)

残りのサポートが必要な場合は、教えてください

于 2013-03-21T09:12:01.400 に答える