我创建了一个包含多个表的数据库。
与我的问题相关的表格:
配置文件表 http://imageshack.us/photo/my-images/838/profileqw.jpg/ 存储所有 porfiles
SalaryGroup 表 http://imageshack.us/photo/my-images/255/salarygroup.jpg/ 存储所有工资
ProfileSalaryGroups http://imageshack.us/photo/my-images/138/profileandsalary.jpg/ 存储连接的个人资料和薪水
我有几个插入配置文件/薪水等的存储过程。我有一个连接配置文件和薪水并将它们存储在“profileSalaryGroups”表中的过程。我还有一个程序可以获取与特定配置文件相关的所有薪水。
这些过程执行以下操作:
连接个人资料和工资程序(完美运行):
ALTER PROCEDURE [dbo].[ConnectProfileAndSalary]
-- Add the parameters for the stored procedure here
@ProfileName varchar(50) = '',
@Salaryname varchar(50) = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @pId int
DECLARE @sId int
SELECT @pId = Id from [Profile] where Name = @ProfileName
SELECT @sId = Id from SalaryGroup where Name = @Salaryname
-- If the Id number already exists
IF ((SELECT COUNT(*) FROM ProfileSalaryGroups WHERE SalaryGroupId = @sId) > 0 OR
(SELECT COUNT(*) FROM ProfileSalaryGroups WHERE ProfileId = @pId) > 0)
RAISERROR ('Connection Exists', -- Message text.
16, -- Severity.
1 )
ELSE
INSERT INTO ProfileSalaryGroups (SalaryGroupId,ProfileId ) VALUES (@sId, @pId)
END
获取与特定配置文件相关的所有薪水(完美运行):
ALTER PROCEDURE [dbo].[GetConnectedSalaries]
-- Add the parameters for the stored procedure here
@ProfId int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT SalaryGroupId, s.Name from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId = @ProfId
END
问题:
我正在尝试创建一个程序来获取所有未连接到个人资料的工资 ID 和姓名。
我已经尝试了几种方法,例如:
SELECT SalaryGroupId, s.Name from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId != @ProfId
这让我得到了我想要的一半。我想获取所有未连接到此配置文件的薪水,但此代码返回我所有与配置文件有连接但不与我作为参数发送的薪水 ID 和名称,它不包括所有“SalaryGroup”表中存在的薪水
SELECT s.Id, s.Name from SalaryGroup s
where NOT EXISTS (SELECT SalaryGroupId, s.Name, s.Id from ProfileSalaryGroups ps
INNER JOIN SalaryGroup as s on s.Id = ps.SalaryGroupId
Where ps.ProfileId = 17
)
这什么也没返回。
我已经有一段时间了,并尝试了其他几种方法(在某些情况下可笑),但我被困住了,如果需要更多信息,请询问,我会尽力提供。
如果标题不正确,我很抱歉,但我不知道该问题的标题是什么。如果@Admin 有更好的标题,请随时更改它。
谢谢!