我是SQL新手,过去几天我一直在努力解决这个问题。
我有这两张桌子:
(抱歉,我不确定如何正确缩进或标记表格)
**Table:**
StaffNo Name DeptNo
DAX001 Joe DA001
DAX002 Eric DA001
DAX003 James DA002
DAX004 Sarah DA002
DAX005 Simon DA003
DAX006 Liam DA003
DAX007 Denis DA004
DAX008 Lisa DA004
DAX009 Eoin DA005
DAX010 Niall DA005
DAX011 Richard DA006
DAX012 Steven DA006
**Department**
DeptNo DeptName
DA001 Security
DA002 Hospitality
DA003 Check-in
DA004 Airport Assistant
DA005 Airport Police
DA006 Maintenance
我试图弄清楚这个输出会产生的查询。
**Output**
Name DeptName
Joe Security
Eric Security
James Hospitality
Sarah Hospitality
Simon Check-in
Liam Check-in
Denis Airport Assistant
Lisa Airport Assistant
Eoin Airport Police
Niall Airport Police
Richard Maintenance
Steven Maintenance
我从部门表中将DeptNo作为主键并且是唯一的。 我通过引用DeptNo从Staff Table中将DeptNo作为外键 来自部门表。
在其他尝试中,我尝试了以下操作,但没有一个工作。
尝试1。
SELECT Staff.Name, Department.DeptName
FROM Staff, Department
WHERE Department.DeptNo = Staff.DeptNo;
尝试2。
SELECT Staff.Name, Department.DeptName
FROM Staff JOIN Department
WHERE Department.DeptNo = Staff.DeptNo;
尝试3。
SELECT Staff.Name, Department.DeptName
FROM Staff LEFT OUTER JOIN Department
WHERE Department.DeptNo = Staff.DeptNo;
尝试4。
SELECT Staff.Name, Department.DeptName
FROM Staff RIGHT OUTER JOIN Department
WHERE Department.DeptNo = Staff.DeptNo;
当我尝试使用...时
SELECT Staff.Name, Department.DeptName
FROM Staff, Department
WHERE Department.DeptNo = "DAA002"
AND Staff.DeptNo = "DAA002";
..我得到了所有在他们旁边热情好客的工作人员名单,而不是旁边应该有“热情好客”的2个名单。
感谢任何帮助,并提前感谢您。
更新:
我在删除外键之前和之后都尝试了所有建议。
在删除外键之前,我大部分都是这样做的:
输出
姓名DeptName
乔安全
Eric Security
詹姆斯安全
Sarah Security
西安保安
利亚姆保安
丹尼斯安全
Lisa Security
Eoin安全
尼尔安全
理查德安全
史蒂文安全
删除外键后,我现在得到:
Joe Security
Joe Hospitality
乔办理登机手续
乔机场助理
乔机场警察
乔维护
Eric Security
Eric Hospitality
埃里克登记入住
埃里克机场助理
埃里克机场警察
Eric维护
詹姆斯安全
James Hospitality
詹姆斯登记入住
詹姆斯机场助理
詹姆斯机场警察
詹姆斯维修
Sarah Security
Sarah Hospitality
莎拉办理登机手续
莎拉机场助理
莎拉机场警察
莎拉维修
西安保安
Simon Hospitality
西蒙登记入住
西蒙机场助理
西蒙机场警察
西蒙维修
利亚姆保安
Liam Hospitality
利亚姆办理登机手续
利亚姆机场助理
利亚姆机场警察
利亚姆维护
丹尼斯安全
Denis Hospitality
丹尼斯办理登机手续
丹尼斯机场助理
丹尼斯机场警察
Denis维护
Lisa Security
Lisa Hospitality
丽莎办理登机手续
丽莎机场助理
丽莎机场警察
丽莎维修
Eoin安全
Eoin Hospitality
Eoin办理登机手续
Eoin机场助理
Eoin机场警察
Eoin维护
尼尔安全
Niall Hospitality
Niall办理登机手续
尼尔机场助理
尼尔机场警察
尼尔维护
理查德安全
Richard Hospitality
Richard Check-in
理查德机场助理
理查德机场警察
理查德维护
史蒂文安全
Steven Hospitality
史蒂文办理登机手续
史蒂文机场助理
史蒂文机场警察
史蒂文维护
到目前为止为此提供帮助。
答案 0 :(得分:0)
尝试1应该有效。但是,我会将其更改为一个更明确的连接,就像您在尝试2中尝试的那样(连接子句不在哪里,而是在ON
中)
SELECT Staff.Name, Department.DeptName
FROM Staff
JOIN Department
ON Department.DeptNo = Staff.DeptNo;
如你所说,你是新人,review this blog post visually showing how joins work
可能会有所帮助此外,谷歌搜索SQL JOIN可以获得关于此主题的大量知识:)
答案 1 :(得分:0)
我建议尝试
SELECT Staff.Name, Department.DeptName
FROM Staff INNER JOIN Department
ON Department.DeptNo = Staff.DeptNo;
或者,如果重复输出
,您可以使用Distinct关键字SELECT DISTINCT Staff.Name, Department.DeptName
FROM Staff INNER JOIN Department
ON Department.DeptNo = Staff.DeptNo;
答案 2 :(得分:0)
尝试#2很接近。
SELECT s.Name, d.DeptName
FROM Staff s
INNER JOIN Department d
ON d.DeptNo = s.DeptNo
或
SELECT Staff.Name, Department.DeptName
FROM Staff
INNER JOIN Department
ON Department.DeptNo = Staff.DeptNo
如果这不起作用,你能提供你得到的输出吗?
答案 3 :(得分:0)
首先检查您的外键 - 您在上次查询中获得了笛卡尔积。 试试这个问题:
SELECT Staff.Name, Department.DeptName
FROM Staff JOIN Department
ON Department.DeptNo = Staff.DeptNo;
这应该得到正确答案