Well, that would work fine except that not all Contacts will have a contact type.CREATE TABLE tblContacts ( contactID int IDENTITY (10001, 1) NOT NULL , CONSTRAINT PK_tblContacts PRIMARY KEY CLUSTERED ( contactID ) WITH FILLFACTOR = 90 ON PRIMARY , ) ON PRIMARYCREATE TABLE tblContactTypes ( contactTypeID int IDENTITY (10001, 1) NOT NULL , contactTypeDesc nvarchar (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , CONSTRAINT PK_tblContactTypes PRIMARY KEY CLUSTERED ( contactTypeID ) WITH FILLFACTOR = 90 ON PRIMARY ) ON PRIMARYCREATE TABLE tblContactsContactTypes ( contactID int NOT NULL , contactTypeID int NOT NULL , CONSTRAINT PK_tblContactsContactTypes PRIMARY KEY CLUSTERED ( contactID, contactTypeID ) WITH FILLFACTOR = 90 ON PRIMARY , CONSTRAINT FK_tblContactsContactTypes_tblContacts FOREIGN KEY ( contactID ) REFERENCES tblContacts ( contactID ) ON DELETE CASCADE , CONSTRAINT FK_tblContactsContactTypes_tblContactTypes FOREIGN KEY ( contactTypeID ) REFERENCES tblContactTypes ( contactTypeID ) ON DELETE CASCADE ) ON PRIMARYCREATE TABLE tblDaysContacts ( dayID int NOT NULL , contactID int NOT NULL , primaryContact bit NOT NULL CONSTRAINT DF_tblDaysContacts_primaryContact DEFAULT (0), CONSTRAINT PK_tblDaysContacts PRIMARY KEY CLUSTERED ( dayID, contactID ) WITH FILLFACTOR = 90 ON PRIMARY , CONSTRAINT FK_tblDaysContacts_tblContacts FOREIGN KEY ( contactID ) REFERENCES tblContacts ( contactID ) ON DELETE CASCADE ,) ON PRIMARY
SELECT tblContactsContactTypes.contactIDFROM tblDaysContacts RIGHT OUTER JOINtblContacts ON tblDaysContacts.contactID = tblContacts.contactID LEFT OUTER JOIN tblContactTypes RIGHT OUTER JOIN tblContactsContactTypes ON tblContactTypes.contactTypeID=tblContactsContactTypes.contactTypeID ON tblContacts.contactID=tblContactsContactTypes.contactIDWHERE (tblDaysContacts.dayID = @dayID) AND tblContactTypes.contactTypeID= CASE WHEN @ctID=-1 THEN tblContactTypes.contactTypeID ELSE @ctID END)
So the problem becomes that I can't set tblContactTypes.contactTypeID=tblContactTypes.contactTypeID if @ctID is -1 because if the Contact is not related to any contactID they will not be returned by the query. Does this make any more sense?