6

我是 MySQL 的新手,我正在使用一个有四个主表的数据库系统,如下所述:

http://www.pastie.org/3832181

此查询主要使用的表在这里:

http://www.pastie.org/3832184

看起来很简单吧?

我的查询的目的是为显式用户获取所有 BusinessID,其中 OpportunityID 为 NULL,一旦它具有这些 BusinessID,我希望它在 Business 表中找到关联的 BusinessName,并将该 BusinessName 与就业机会中的 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 个,或者 8 个重复的这 3 个集。

谢谢,如果你能帮我解决这个问题。

4

3 回答 3

2

使用distinct关键字删除重复项。

看看这里

于 2012-04-22T06:51:15.663 回答
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 
于 2012-04-22T07:00:13.140 回答
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

朱利安

于 2012-04-22T07:10:12.720 回答