SQL-EX练习37

SQL-EX练习37,sql,Sql,练习37。查找数据库中仅存在一个ship的类(包括结果表)。这是我的问题: select class from ( select classes.class from classes left join ships on classes.class=ships.class left join outcomes on classes.class=outcomes.ship ) as a group by class having count(class)=1 这在第一个(可用)数据库上返回了正

练习37。查找数据库中仅存在一个ship的类(包括结果表)。这是我的问题:

select class from 
(
select classes.class
from classes left join ships on classes.class=ships.class
left join outcomes on classes.class=outcomes.ship
) as a
group by class having count(class)=1
这在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了错误的数据集

不知道为什么这是错误的,有人知道吗

select class from
(
select distinct ship, class
from
(
select o.ship, o.ship as class from outcomes o
join Classes c on c.class=o.ship
union 
Select Name as ship, class
from
ships
)
A
)A
group by
class
having count(*)=1

这是一个正确的答案

欢迎来到SO。请拿这本书读一读。你能分享一下这两个测试用例之间的区别吗?错误的记录数(多4个)学习如何提问。您的第二个左联接似乎写得不正确。例如,您告诉它(第一)将类加入到船舶,然后(第二)将船舶加入到结果,但您的“开”尝试将(第一)类加入到船舶,然后(第二)类加入到结果。。。所以如果您实际尝试将类连接到ships,将类连接到outcouts,则连接可以从ships上的ships右连接类读取。class=classes.class左连接outcouts ON classes.class=outcouts.ship…这会将classes表移动到中间,因为它可以很容易地与其他表关联,因为它显示在您的位置实际上,我们并没有试图直接将你们的飞船和结果表联系起来。当然,如果你是的话,那也许能帮我看看桌子是什么样子。