我在数据库中有以下表格(我将只列出重要的属性):
Person(ssn,countryofbirth)
Parents(ssn,fatherbirthcountry)
Employment(ssn, companyID)
Company(companyID, name)我的任务是:给定父亲出生国作为输入,输出其出生国与输入的出生国匹配的公司的名称。
我假装父亲的出生国是墨西哥,然后这样做:
SELECT name
FROM Company
WHERE companyid = (SELECT companyid
FROM Employment
WHERE ssn = (SELECT ssn
FROM Person
WHERE countryofbirth = 'Mexico');但它给了我一个错误:
>Scalar subquery is only allowed to return a single row.我是不是完全偏离正轨了?有人能帮帮忙吗?
发布于 2010-03-12 13:16:21
问题是您的子查询返回多个结果,所以您必须使用where in而不是=。
将where ssn =更改为where ssn in,将where companyid =更改为where companyid in。
发布于 2010-03-12 13:17:14
尝试使用IN关键字,而不是'=‘。
尝试将您的查询更改为
SELECT name FROM Company WHERE companyid IN (选择companyid
FROM Employment WHERE ssn IN (SELECT ssn FROM Person WHERE countryofbirth = 'Mexico');发布于 2010-03-12 13:25:32
使用:
SELECT c.name
FROM COMPANY c
JOIN EMPLOYMENT e ON e.companyid = c.companyid
JOIN PERSON p ON p.ssn = e.ssn
AND p.countryofbirth = 'Mexico'https://stackoverflow.com/questions/2430629
复制相似问题