2011-11-17 38 views
22

主题表选择行不是在另一个表,SQL Server查询

CREATE TABLE [dbo].[BS_Subject](
    [SubjectID] [bigint] IDENTITY(1,1) NOT NULL, 
    [DepartmentID] [bigint] NOT NULL, 
    [SubjectName] [varchar](50) NOT NULL, 
    [SubjectDescription] [varchar](100) NULL, 
    [SubjectShortCode] [varchar](10) NOT NULL, 
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED 
(
    [SubjectID] ASC 
) 

SubjectToClass表

CREATE TABLE [dbo].[BS_SubjectToClass](
[SubjectToClassID] [bigint] IDENTITY(1,1) NOT NULL, 
[SubjectID] [bigint] NOT NULL, 
[ClassID] [bigint] NOT NULL, 
CONSTRAINT [PK_BS_SubjectToClass] PRIMARY KEY CLUSTERED 
(
[SubjectToClassID] ASC 
) 

我需要列出所有行的Subject表,其中subjectidSubjectToClass表的指定的类。

我有这个,但不能再往前走

select Distinct(BS_Subject.SubjectID) DepartmentID, 
     SubjectName, SubjectDescription, SubjectShortCode 
from dbo.BS_Subject 
where BS_Subject.SubjectID <> (
SELECT  Distinct(BS_Subject.SubjectID) 
FROM   dbo.BS_Subject, dbo.BS_SubjectToClass 
Where  BS_Subject.SubjectID = BS_SubjectToClass.SubjectID 
And BS_SubjectToClass.ClassID = 2) 
+0

可能要重新编写它,并重新格式化以使其具有一定意义。 –

回答

34
SELECT SubjectID, DepartmentID, SubjectName, SubjectDescription, SubjectShortCode 
FROM BS_Subject 
WHERE NOT EXISTS 
(SELECT SubjectToClassID FROM BS_SubjectToClass WHERE 
BS_Subject.SubjectID = BS_SubjectToClass.SubjectID 
AND BS_SubjectToClass.ClassID =2) 
+0

这不适用于SQL Studio或Visual Studio。 – tcables

+1

@tcables这在SSMS或Visual Studio中不起作用?它在SSMS 2008和Visual Studio 2012中完全适合我。 –

+0

SQL Studio不喜欢WHERE NOT EXISTS之后的语句。可能是因为它只是我的设置,但是当我在下面的答案中替换了列名时,它起作用了。 – tcables

11

您需要使用NOT IN运营商 - 而不是<>(这是VB或东西....)

SELECT 
    DISTINCT(BS_Subject.SubjectID) DepartmentID, 
    SubjectName, SubjectDescription, SubjectShortCode 
FROM dbo.BS_Subject 
WHERE 
    BS_Subject.SubjectID NOT IN 
     (SELECT DISTINCT(BS_Subject.SubjectID) 
     FROM dbo.BS_Subject, dbo.BS_SubjectToClass 
     WHERE BS_Subject.SubjectID = BS_SubjectToClass.SubjectID 
     AND BS_SubjectToClass.ClassID = 2) 
+0

有趣的是,您可以使用['<>'以及MS SQL中的'!='](http://stackoverflow.com/questions/723195/should-i-use-or-for-not-equal- in-tsql)(尽管这与'NOT IN'不一样)。 – Hannele

相关问题