2011-11-17 29 views
22

Konu tablosatırları seçin değil, SQL Server sorgu

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 tablo

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 
) 

Ben subjectid a SubjectToClass tabloda olmadığı Subject tablodaki tüm satırları listelemek gerek belirtilen sınıf.

ben gitmek mümkün ama bu var başka

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) 
Sen NOT IN operatörünü kullanmak gerekir
+0

Onu yeniden canlandırmak ve bir şeyler yapmak için yeniden biçimlendirmek isteyebilir. –

cevap

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

Bu, SQL Studio veya Visual Studio'da çalışmaz. – tcables

+1

@tcables SSMS veya Visual Studio'da bu nasıl çalışmıyor? SSMS 2008 ve Visual Studio 2012'de benim için mükemmel bir şekilde çalışıyor. –

+0

SQL Studio, WHERE EXISTS ifadesinin ardından yapılan ifadeyi beğenmedi. Sadece benim kurulumum olabilir, ama aşağıdaki cevapta sütun isimlerini değiştirdiğimde işe yaradı. – tcables

11

- değil <> (yani VB falandır ....)

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

Eğlenceli gerçek, ['<>' yanı sıra MS SQL'de '! =' Kullanabilirsiniz (http://stackoverflow.com/questions/723195/should-i-use-or-for-not-equal- in-tsql) (Bununla birlikte, bu hala IN NOT' ile aynı değildir). – Hannele

İlgili konular