派生テーブルには、エラー メッセージが訴えている名前が必要です (以下をYouNeedToPutATableAliasHere
参照)。
SELECT CONCAT(FName,' ',LName) AS Faculty,DepartmentID,Salary
FROM Faculty,
(SELECT DISTINCT DepartmentID AS Department, MIN(Salary) AS MinSalary
FROM Faculty GROUP BY DepartmentID) AS YouNeedToPutATableAliasHere
WHERE Faculty.DepartmentID= 'Department' AND Salary= MinSalary
ORDER BY DepartmentID
意味をなさない単一引用符もいくつか削除したことに注意してください。(おそらく、列名の二重引用符、角括弧、またはバッククォートを意味していましたが、単一引用符はおそらく機能しません。「Department」についても同じことをする必要があるかもしれません?)
2 つのテーブルを関連付ける条件を指定しない限り、デカルト結合も作成します。「学部で最低給与の教員」のより良いクエリは次の'Department'
ようになります (冗長な GROUP BY を削除したことに注意してください)。
SELECT CONCAT(FName,' ',LName) AS Faculty,F.DepartmentID,F.Salary
FROM Faculty F
INNER JOIN (
SELECT DepartmentID,
MIN(Salary) AS MinSalary
FROM Faculty
GROUP BY DepartmentID
) AS MinSal ON MinSal.DepartmentID = F.DepartmentID
AND F.Salary = MinSal.MinSalary
WHERE F.DepartmentID= 'Department'
ORDER BY F.DepartmentID
または、1 つの department のみを選択しているため、次の'Department'
ようにすることもできます。
SELECT CONCAT(FName,' ',LName) AS Faculty,F.DepartmentID,F.Salary
FROM Faculty F
WHERE F.DepartmentID= 'Department'
AND F.Salary = (
SELECT MIN(Salary)
FROM Faculty
WHERE DepartmentID = F.DepartmentID
)
または(複数の部門でも機能しますが、結合よりも遅くなる可能性があります):
SELECT CONCAT(FName,' ',LName) AS Faculty,F.DepartmentID,F.Salary
FROM Faculty F
WHERE F.DepartmentID= 'Department'
AND NOT EXISTS(
SELECT 1
FROM Faculty FF
WHERE FF.DepartmentID = F.DepartmentID
AND FF.Salary < F.Salary
)
実際、元のクエリを見て、@ RichardTheKiwi のコメントを読みながらこの質問を完成させるために、その解釈をこの回答に組み込みます。これは、MySQL を (CONCAT 関数から) 使用しており、列名の前方ティックではなくバックティックを意味していることを前提としています。また、「Department」として指定された学部だけでなく、すべての学部の最低給与教員が必要であると想定しています。ただし、最初に提案したクエリからの小さな変更、つまりWHERE
句の削除が必要です。
SELECT CONCAT(FName,' ',LName) AS Faculty,F.DepartmentID,F.Salary
FROM Faculty F
INNER JOIN (
SELECT DepartmentID,
MIN(Salary) AS MinSalary
FROM Faculty
GROUP BY DepartmentID
) AS MinSal ON MinSal.DepartmentID = F.DepartmentID
AND F.Salary = MinSal.MinSalary
ORDER BY F.DepartmentID