MySQL查询返回重复结果

6

我在MySQL方面还比较新,正在处理一个包含四个主要表的数据库系统,这些表在此处描述:

http://www.pastie.org/3832181

这个查询主要操作的表在这里:

http://www.pastie.org/3832184

看起来相当简单,对吧?

我的查询目的是获取特定用户的所有BusinessID,其中OpportunityID为NULL,一旦获得这些BusinessID,我希望它在Business表中找到关联的BusinessName,并将该BusinessName与EmploymentOpportunity表中的BusinessName(Business)匹配。

这是执行该操作的查询。

SELECT EmploymentOpportunity.OpportunityID, Business, Description 
FROM UserBusinessOpportunity, Business, EmploymentOpportunity
WHERE UserBusinessOpportunity.BusinessID = 
          (SELECT UserBusinessOpportunity.BusinessID 
          FROM UserBusinessOpportunity 
          WHERE UserBusinessOpportunity.UserID=1 AND
                UserBusinessOpportunity.OpportunityID is NULL) 
       AND UserBusinessOpportunity.BusinessID = Business.BusinessID 
       AND Business.BusinessName = EmploymentOpportunity.Business;

子查询语句应返回BusinessID的子集。我相信这是一个非常简单的查询,但它一直给我重复的结果,我不确定为什么。结果集应该是3个,但它却给我发送了24个,或者是那3个的8个重复集合。谢谢,如果您能帮我解决这个问题。

请停止使用旧的JOIN语法 - DCoder
3个回答

2

那肯定有效。我只是好奇是否我的查询中可能有错误,这可能会解决问题。 - sbadams

1

当你在 SQL 语句中进行连接时,可能会遗漏某个约束条件。根据你的描述,我认为这个查询可能适合你。

SELECT 
    User.UserID,
    Business.BusinessID,
    Business.BusinessName
FROM
    User,
    UserBusinessOpportunity,
    Business
WHERE
    User.UserID = 1 AND
    User.UserID = UserBusinessOpportunity.UserID AND
    UserBusinessOpportunity.OpportunityID IS NULL AND
    UserBusinessOpportunity.BusinessID = Business.BusinessID 

1

我认为你想要一个内连接,但是你的查询是一个隐式外连接。

使用空字段进行连接通常最好使用左连接。

尝试这个:

SELECT EmploymentOpportunity.OpportunityID, Business, Description
FROM EmploymentOpportunity
JOIN Business ON Business.BusinessName = EmploymentOpportunity.Business
LEFT JOIN UserBusinessOpportunity USING(BusinessID) 
WHERE
 UserBusinessOpportunity.UserID=1
AND
 UserBusinessOpportunity.OpportunityID is NULL

朱利安


顺便说一下,你应该因为这个问题获得某种奖励。这是一个完美的模型,可以提供获取帮助所需的确切信息。如果你提供了架构的SQL-"SHOW CREATE TABLE"而不是"DESCRIBE",我甚至可以加载它并运行查询。 - Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接