Mysql 如何从一个表返回一组值,从另一个表返回正确的唯一值?
我是SQL新手,过去几天我一直在努力解决这个问题 我有两张桌子: 对不起,我不知道如何正确缩进或制表Mysql 如何从一个表返回一组值,从另一个表返回正确的唯一值?,mysql,sql,Mysql,Sql,我是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 Lis
**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
我已将Department表中的DeptNo作为主键和唯一键。
我已经通过引用DeptNo将Staff表中的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";
…我得到的是一份旁边有热情好客的所有员工的名单,而不是一份旁边应该有热情好客的两个人的名单
感谢您的帮助,并提前向您表示感谢
更新:
在删除外键之前和之后,我已经尝试了您的所有建议
在删除外键之前,我得到的大部分信息是:
输出
姓名
乔安全
埃里克安全
詹姆斯安全
莎拉安全
西蒙安全
利亚姆安全
丹尼斯保安公司
丽莎安全
安全问题
尼尔安全
理查德安全
史蒂文安全
删除外键后,我现在得到:
乔安全
乔酒店
乔登记
乔机场助理
乔机场警察
乔维修
埃里克安全
埃里克酒店
埃里克登记
埃里克机场助理
埃里克机场警察
埃里克维修
詹姆斯安全
詹姆斯酒店
詹姆斯登记
詹姆斯机场助理
詹姆斯机场警察局
詹姆斯维修
莎拉安全
莎拉酒店
莎拉登记入住
莎拉机场助理
莎拉机场警察
莎拉维修
西蒙安全
西蒙酒店
西蒙登记入住
西蒙机场助理
西蒙机场警察局
西蒙维修
利亚姆安全
利亚姆酒店
利亚姆登记
利亚姆机场助理
利亚姆机场警察局
利亚姆维修
丹尼斯保安公司
丹尼斯酒店
丹尼斯登记
丹尼斯机场助理
丹尼斯机场警察局
丹尼斯维修
丽莎安全
丽萨酒店
丽莎登记
丽莎机场助理
丽莎机场警察
Lisa维护
安全问题
伊欧酒店
办理登机手续
机场助理
机场警察局
Eoin维护
尼尔安全
尼尔酒店
尼尔登记入住
尼尔机场助理
尼尔机场警察局
尼尔维修
理查德安全
理查德酒店
理查德登记
理查德机场助理
理查德机场警察
理查德维修
史蒂文安全
史蒂文酒店
史蒂文登记
史蒂文机场助理
史蒂文机场警察
史蒂文维修
为目前为止的帮助干杯。尝试1应该有效。但是,我会将其更改为更显式的联接,就像您在尝试2中尝试的那样。联接子句不在where中,而是在ON中 正如你所说的,你是新来的,这可能对你有好处
另外,在谷歌上搜索SQLJoin可以获得大量关于这个主题的知识:尝试1应该可以。但是,我会将其更改为更显式的联接,就像您在尝试2中尝试的那样。联接子句不在where中,而是在ON中 正如你所说的,你是新来的,这可能对你有好处 另外,在谷歌上搜索SQLJoin也可以获得大量关于这个主题的知识:我建议试试
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;
我建议试试
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;
第二次尝试很接近
SELECT s.Name, d.DeptName
FROM Staff s
INNER JOIN Department d
ON d.DeptNo = s.DeptNo
或
如果这不起作用,您能提供您作为输出得到的信息吗?尝试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 JOIN Department
ON Department.DeptNo = Staff.DeptNo;
这应该得到正确答案首先检查您的外键-您在上一次查询中得到了笛卡尔积。 请尝试以下查询:
SELECT Staff.Name, Department.DeptName
FROM Staff JOIN Department
ON Department.DeptNo = Staff.DeptNo;
这应该得到正确的答案谢谢您迄今为止的帮助。当我运行答案中提到的查询时,我更新了问题的答案。我仍然不明白为什么我会得到这个输出。谢谢这里的链接。谢谢到目前为止的帮助。当我运行答案中提到的查询时,我更新了问题的答案。我仍然不明白为什么我会得到这个输出。谢谢这里的链接。我从staff表中的DeptNo中删除了外键。上面用查询的输出进行了更新。我从staff表中的DeptNo中删除了外键。上面更新了查询的输出。欢迎回答。更新了上述问题
h我得到的输出。欢迎回答。用我得到的输出更新了上面的问题。我已经通过创建表、将数据加载到表中并执行上述查询来验证了这一点。两者都将产生您正在寻找的输出。我已经通过创建表、将数据加载到表中并执行上述查询来验证这一点。两者都将产生您正在寻找的输出。为什么要删除外键?这无论如何都不会改变您的查询,因为它更像是一个数据完整性约束。如果您正在执行一个连接,就像我在回答中给出的以及其他人给出的一样,那么您不应该得到您现在的输出。看起来您正在运行完整的外部联接:从Staff、Department、Department中选择Staff.Name、Department.DeptName看起来您的查询是正确的,并以某种方式对其进行了更改…这就是您删除FK的意思吗?请至少发布您当前的查询为什么要删除外键?这无论如何都不会改变您的查询,因为它更像是一个数据完整性约束。如果您正在执行一个连接,就像我在回答中给出的以及其他人给出的一样,那么您不应该得到您现在的输出。看起来您正在运行完整的外部联接:从Staff、Department、Department中选择Staff.Name、Department.DeptName看起来您的查询是正确的,并以某种方式对其进行了更改…这就是您删除FK的意思吗?请至少发布您当前的查询