我一直在努力解决这个问题,我不确定如何完成这项任务:“如果他的部门至少有2个年级评论超过1.0的爪牙,那就更新Jarrod的工资。”我们有以下表格:
Table Person {
Name: Johnathan;
SSN: 1234;
Name: Robert;
SSN: 1324;
Name: Jarrod;
SSN: 4231;
}
Table Overlord {
OverlordID: 1234;
Salary: 1000;
OverlordID: 1324;
Salary: 1330;
OverlordID: 4231;
Salary: 1210;
}
Table Minion {
Name: Shemp;
SSN: 1264;
Yearly Review: 1.2;
Name: Moe;
SSN: 1624;
Yearly Review: 0.2;
Name: Curly;
SSN: 4261;
Yearly Review: 1.4;
}
Table Dept {
DeptName: Evil;
Sector: 1A;
OverlordID: 1234;
DeptName: Good;
Sector: 2B;
OverlordID: 4231;
}
Table Payrolls {
DeptName: Good;
Sector: 2B;
MinionID: 1264;
DeptName: Good;
Sector: 2B;
MinionID: 4261;
DeptName: Evil;
Sector: 1A;
MinionID: 1624;
}
我为这是一个复杂的数据库结构而道歉,但是使用这样的结构,我需要知道它是如何可能的:
更新Jarrod的工资,如果他的部门至少有2个年级审查超过1.0的爪牙。
答案 0 :(得分:2)
一种方法是使用子查询,如下所示:
SELECT MinionID FROM Payrolls WHERE DeptName = (
SELECT DeptName FROM Dept WHERE OverlordID = (
SELECT SSN FROM Person WHERE Name = "Jarrod"
)
)
基本上,我们为名为Jarrod的人获取SSN,然后我们获得由该SSN领导的部门名称,然后我们得到以该名称为部门工作的仆从。
这将返回以下数据:
MinionID
---------
1264
4261
然后,您可以将上述查询嵌套在另一个查询中,以将MinionID与Minion表连接:
SELECT * FROM Minion a JOIN (query from above) b ON (a.SSN = b.MinionID)
或者您可以使用IN条件,如下所示:
SELECT * FROM Minion WHERE SSN IN (query from above)
此时我们可以在另一个查询中嵌套,以获得满足YearlyReview>的行数的计数。 1.0:
SELECT COUNT(*) FROM (query from above) c WHERE c.YearlyReview > 1.0;
返回一个包含单行的表:
COUNT(*)
--------
2
现在,您可以在if语句中嵌套 查询,以查看该值是否为> =。
以下是将所有部分放在一起时的样子:
SELECT COUNT(*) FROM (
SELECT * FROM Minion WHERE SSN IN (
SELECT MinionID FROM Payrolls WHERE DeptName = (
SELECT DeptName FROM Dept WHERE OverlordID = (
SELECT SSN FROM Person WHERE Name = "Jarrod"
)
)
)
) c WHERE c.YearlyReview > 1.0;