Sql 每个派生表都需要一个别名
这是我的代码,我需要每个系工资最低的教员的全名和工资。我的子查询自己工作,但我无法让其他子查询一起工作Sql 每个派生表都需要一个别名,sql,Sql,这是我的代码,我需要每个系工资最低的教员的全名和工资。我的子查询自己工作,但我无法让其他子查询一起工作 SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary FROM Faculty, (SELECT DISTINCT DepartmentID AS 'Department', MIN(Salary) AS 'MinSalary' FROM Faculty GROUP BY DepartmentID) WHERE Facu
SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary
FROM Faculty,
(SELECT DISTINCT DepartmentID AS 'Department', MIN(Salary) AS 'MinSalary'
FROM Faculty GROUP BY DepartmentID)
WHERE Faculty.DepartmentID= 'Department' AND Salary= 'MinSalary'
ORDER BY DepartmentID
您的派生表需要一个名称,该名称正是错误消息所抱怨的名称。请参见下面的YouneedtoputableAlias: 注意,我还删除了一些对我来说没有意义的单引号。也许您是指列名的双引号、方括号或反勾号,但单引号可能不起作用-您可能需要对“Department”执行相同的操作 除非指定两个表相关的条件,否则也将创建笛卡尔连接。对系“系”中最低工资的教员的更好查询可能是注意,我已通过以下方式删除了冗余组:
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
或者,由于您只选择了一个部门“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
)
您的派生表需要一个名称,该名称正是错误消息所抱怨的名称。请参见下面的YouneedtoputableAlias: 注意,我还删除了一些对我来说没有意义的单引号。也许您是指列名的双引号、方括号或反勾号,但单引号可能不起作用-您可能需要对“Department”执行相同的操作 除非指定两个表相关的条件,否则也将创建笛卡尔连接。对系“系”中最低工资的教员的更好查询可能是注意,我已通过以下方式删除了冗余组:
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
或者,由于您只选择了一个部门“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
)
您需要在子查询上pud别名
SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary
FROM Faculty,
(
SELECT DISTINCT DepartmentID AS 'Department',
MIN(Salary) AS 'MinSalary'
FROM Faculty GROUP BY DepartmentID
) xx -- <<< this is the alias. (Don't forget this)
WHERE Faculty.DepartmentID= 'Department' AND Salary= 'MinSalary'
ORDER BY DepartmentID
select
concat(F.FName, ' ', F.LName) as Faculty,
F.DepartmentID,
D.MinSalary
from faculty as F
inner join
(
select T.DepartmentID, min(T.Salary) as MinSalary
from Faculty as T
group by T.DepartmentID
) as D on D.DepartmentID = F.DepartmentID and D.MinSalary = F.Salary
order by F.DepartmentID
更新1
也可能是SQL Server 2012。已经支持CONCAT
您需要在子查询上pud别名
SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary
FROM Faculty,
(
SELECT DISTINCT DepartmentID AS 'Department',
MIN(Salary) AS 'MinSalary'
FROM Faculty GROUP BY DepartmentID
) xx -- <<< this is the alias. (Don't forget this)
WHERE Faculty.DepartmentID= 'Department' AND Salary= 'MinSalary'
ORDER BY DepartmentID
select
concat(F.FName, ' ', F.LName) as Faculty,
F.DepartmentID,
D.MinSalary
from faculty as F
inner join
(
select T.DepartmentID, min(T.Salary) as MinSalary
from Faculty as T
group by T.DepartmentID
) as D on D.DepartmentID = F.DepartmentID and D.MinSalary = F.Salary
order by F.DepartmentID
更新1
也可能是SQL Server 2012。已经支持CONCAT
在别名周围使用单引号的问题在于,您落入了查询中显而易见的陷阱——第一个条件是将DepartmentID与字符串文字“Department”匹配。这也适用于“MinSalary”专栏
另外值得注意的是,GROUPBY不需要DISTINCT,因为您已经获得了DepartmentID的DISTINCT值
这里的第一个问题是,每个派生表aka子查询都需要一个别名,或者用它来标识其中的列。在下面的示例中,您可以看到ON子句的第一部分比较了两个DepartmentID列。这里必须使用别名F和G来区分这两个表,因此需要对每个表使用别名
在别名周围使用单引号的问题在于,您落入了查询中显而易见的陷阱——第一个条件是将DepartmentID与字符串文字“Department”匹配。这也适用于“MinSalary”专栏
另外值得注意的是,GROUPBY不需要DISTINCT,因为您已经获得了DepartmentID的DISTINCT值
这里的第一个问题是,每个派生表aka子查询都需要一个别名,或者用它来标识其中的列。在下面的示例中,您可以看到ON子句的第一部分比较了两个DepartmentID列。别名F和G在这里是区分这两个的必要条件,因此需要为每个表添加别名。您的查询需要子查询的别名
SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary
FROM Faculty,
(
SELECT DISTINCT DepartmentID AS 'Department',
MIN(Salary) AS 'MinSalary'
FROM Faculty GROUP BY DepartmentID
) xx -- <<< this is the alias. (Don't forget this)
WHERE Faculty.DepartmentID= 'Department' AND Salary= 'MinSalary'
ORDER BY DepartmentID
select
concat(F.FName, ' ', F.LName) as Faculty,
F.DepartmentID,
D.MinSalary
from faculty as F
inner join
(
select T.DepartmentID, min(T.Salary) as MinSalary
from Faculty as T
group by T.DepartmentID
) as D on D.DepartmentID = F.DepartmentID and D.MinSalary = F.Salary
order by F.DepartmentID
您的查询需要子查询的别名
SELECT CONCAT(FName,' ',LName) AS 'Faculty',DepartmentID,Salary
FROM Faculty,
(
SELECT DISTINCT DepartmentID AS 'Department',
MIN(Salary) AS 'MinSalary'
FROM Faculty GROUP BY DepartmentID
) xx -- <<< this is the alias. (Don't forget this)
WHERE Faculty.DepartmentID= 'Department' AND Salary= 'MinSalary'
ORDER BY DepartmentID
select
concat(F.FName, ' ', F.LName) as Faculty,
F.DepartmentID,
D.MinSalary
from faculty as F
inner join
(
select T.DepartmentID, min(T.Salary) as MinSalary
from Faculty as T
group by T.DepartmentID
) as D on D.DepartmentID = F.DepartmentID and D.MinSalary = F.Salary
order by F.DepartmentID
最好同时为表和子选择查询表使用别名:
SELECT CONCAT(F.FName,' ',F.LName) AS Faculty,F.DepartmentID, F.Salary
FROM Faculty F,
(SELECT DISTINCT DepartmentID AS Department, MIN(Salary) AS MinSalary
FROM Faculty GROUP BY DepartmentID) AS DEP_MIN_SALARY
WHERE F.DepartmentID= DEP_MIN_SALARY.Department
AND F.Salary= DEP_MIN_SALARY.MinSalary
ORDER BY FDepartmentID;
注意:您没有从派生表中检索任何列。希望这是有意的。最好对表和子选择查询表使用别名:
SELECT CONCAT(F.FName,' ',F.LName) AS Faculty,F.DepartmentID, F.Salary
FROM Faculty F,
(SELECT DISTINCT DepartmentID AS Department, MIN(Salary) AS MinSalary
FROM Faculty GROUP BY DepartmentID) AS DEP_MIN_SALARY
WHERE F.DepartmentID= DEP_MIN_SALARY.Department
AND F.Salary= DEP_MIN_SALARY.MinSalary
ORDER BY FDepartmentID;
注意:您没有从派生表中检索任何列。希望这是有意的。作为标题提示中的错误消息,标准SQL要求FROM子句中的子查询具有名称。您还应该学习使用联接符号,而不是逗号分隔的表名列表。您需要知道旧的SQL92之前的符号才能识别它;你不应该自己使用它
SELECT CONCAT(F.FName, ' ', F.LName) AS 'Faculty', F.DepartmentID, F.Salary
FROM Faculty AS F
JOIN (SELECT DISTINCT DepartmentID AS 'Department', MIN(Salary) AS 'MinSalary'
FROM Faculty
GROUP BY Department) AS D
ON F.DepartmentID = D.Department AND F.Salary = D.MinSalary
ORDER BY F.DepartmentID;
作为标题提示中的错误消息,标准SQL要求FROM子句中的子查询具有名称。您还应该学习使用联接符号,而不是逗号分隔的表名列表。您需要知道旧的SQL92之前的符号才能识别它;你不应该自己使用它
SELECT CONCAT(F.FName, ' ', F.LName) AS 'Faculty', F.DepartmentID, F.Salary
FROM Faculty AS F
JOIN (SELECT DISTINCT DepartmentID AS 'Department', MIN(Salary) AS 'MinSalary'
FROM Faculty
GROUP BY Department) AS D
ON F.DepartmentID = D.Department AND F.Salary = D.MinSalary
ORDER BY F.DepartmentID;
有人投票吗?什么?你至少可以评论一下,这样我就可以改进我的答案了……看起来,我也得到了-1,没有评论。不解释你的想法就否决这个答案不是很勇敢point@RichardTheKiwi谁能说这是个错误呢??这是在原始问题的疑问中有绝对意义的
实际上与“Department”无关,但解释如何修复每个派生表都需要别名错误。注意,我甚至对我的答案做了一些修改,添加了一个解释。我谦恭地完全不同意我原来的答案是错误的,但我希望*除了有帮助之外,我还添加了这些注释和评论。@RichardTheKiwi AFAIK我的答案是/是正确的,除了表中的一个别名,我没有投反对票就更正了它。事实上,当smbd提出一个问题并在不到3分钟的时间内得到5个几乎相同的问题作为答案时,它变得很奇怪:我认为我们需要更复杂的问题:有人投票吗?什么?你至少可以评论一下,这样我就可以改进我的答案了……看起来,我也得到了-1,没有评论。不解释你的想法就否决这个答案不是很勇敢point@RichardTheKiwi谁能说这是个错误呢??在原始问题的查询中,它与“Department”完全无关,但解释如何修复每个派生表都需要别名错误。注意,我甚至对我的答案做了一些修改,添加了一个解释。我谦恭地完全不同意我原来的答案是错误的,但我希望*除了有帮助之外,我还添加了这些注释和评论。@RichardTheKiwi AFAIK我的答案是/是正确的,除了表中的一个别名,我没有投反对票就更正了它。事实上,当smbd提出一个问题并在不到3分钟的时间内得到5个几乎相同的问题作为答案时,它变得很奇怪:我认为我们需要更复杂的问题:谁知道;有一大堆不必要的否决票,我甚至不清楚是谁做的,当然也不清楚为什么。谢谢你的拯救投票,谁知道呢;有一大堆不必要的否决票,我甚至不清楚是谁做的,当然也不清楚为什么。谢谢你的拯救投票。