複数のテーブルを持つデータベースを作成しました。
私の問題に関連する表:
プロファイルテーブル http://imageshack.us/photo/my-images/838/profileqw.jpg/ すべてのporfileを保存します
SalaryGroupテーブル http://imageshack.us/photo/my-images/255/salarygroup.jpg/ すべての給与を保存します
ProfileSalaryGroupshttp : //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の方が適切なタイトルを念頭に置いている場合は、自由に変更してください。
ありがとうございました!