2011-11-17 69 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