SQL - 我想做与此代码相反的操作

时间:2011-12-15 11:22:59

标签: sql database join

SELECT DISTINCT Database1.dbo.tblCustomers.SiteNum

FROM Database1.dbo.tblCustomers
LEFT OUTER JOIN tblWebUsers on tblWebUsers.SiteNum = Database1.dbo.tblCustomers.SiteNum

WHERE **tblWebUsers.ID = '4'**

这将返回与webuser id相关的所有sitenums,但我该如何做相反的事情呢?即返回与webuser id无关的所有站点号 - 我在(4)中没有尝试过,但它只返回所有没有id的webusers站点号...我想从database1

3 个答案:

答案 0 :(得分:0)

试试这个:

    SELECT DISTINCT Database1.dbo.tblCustomers.SiteNum
    FROM Database1.dbo.tblCustomers 
    WHERE tblWebUsers.ID NOT IN (SELECT tblWebUsers.ID FROM Database1.dbo.tblUsers)

答案 1 :(得分:0)

目前还不清楚相反的情况(我们没有任何样本数据和预期结果可供使用,只有您可以看到您的实际数据库),但我注意到tblWebUsers.ID = '4'在你的where子句中强制左连接成为内连接。

这可能更接近你想要的东西:

SELECT DISTINCT Database1.dbo.tblCustomers.SiteNum

FROM Database1.dbo.tblCustomers
LEFT OUTER JOIN tblWebUsers on
      tblWebUsers.SiteNum = Database1.dbo.tblCustomers.SiteNum and
      tblWebUsers.ID = '4'

或者更可编辑成您正在寻找的最终形式。


事实上,我认为这就是你想要的:

SELECT DISTINCT Database1.dbo.tblCustomers.SiteNum

FROM Database1.dbo.tblCustomers
LEFT OUTER JOIN tblWebUsers on
      tblWebUsers.SiteNum = Database1.dbo.tblCustomers.SiteNum and
      tblWebUsers.ID = '4'
WHERE
    tblWebUsers.ID is null

也就是说,您希望找到来自tblCustomers的行,其中tblWebUsers中有一行ID等于4.但是,再次,它如果你能更清楚地解释你想要达到的目标,希望有样本数据和预期结果,那会更好。

答案 2 :(得分:0)

试试这个:

SELECT DISTINCT Database1.dbo.tblCustomers.SiteNum
FROM Database1.dbo.tblCustomers
WHERE NOT EXISTS (
    SELECT TOP 1 1 FROM tblWebUsers 
    WHERE tblWebUsers.SiteNum = Database1.dbo.tblCustomers.SiteNum 
        AND tblWebUsers.ID = @tblWebUsersID
)

@tblWebUsersID是你的参数。