SQL server存储过程 - 我可以反转此查询吗?

时间:2013-05-20 17:45:37

标签: sql-server tsql stored-procedures

我不是一个sql Guru,这就是我问你们的原因。

我有这个存储过程:

USE [groep2_festivals]
GO
/****** Object:  StoredProcedure [dbo].[GetGroupsNotOfFestival]    Script Date: 15-05-13 10:03:17 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Robbie Vercammen
-- Create date: 2013-05-15
-- Description: Getting all groups not on a defined festival
-- =============================================
ALTER PROCEDURE [dbo].[GetGroupsNotOfFestival]
    @festId  nvarchar(4)
AS
BEGIN
    SELECT DISTINCT b.*, p.* 
    FROM bands b 
    JOIN bandsperfestival bpf ON b.band_id = bpf.band_id 
    JOIN podia p ON p.pod_id = bpf.pod_id
    WHERE bpf.fest_id != @festId
END

这些表格, 带:

bands table

Podia(英语阶段):

Stages table

BandsPerFestival举办各种节日表演:

table with all bands performing on a festival

我使用这个存储过程让所有乐队在一个特定的音乐节上演出(按节日编号)并且有效,但我想反过来但是用WHERE bpf.fest_id = @festId替换WHERE bpf.fest_id != @festId并不简单似乎工作。我得到了相同的名单,但实际上在节日上表演的乐队会被退回两次。

示例:

example of what's wrong

正如你所看到的,当他们在所选节日上实际表演时,镍背会出现在列表中两次。

感谢任何帮助。

编辑:我应该早些说过,但我想要所有在特定节日上没有表演的乐队,

2 个答案:

答案 0 :(得分:2)

执行左外连接,然后强制连接的右侧为空。

SELECT DISTINCT b.*
FROM bands b 
left outer JOIN bandsperfestival bpf ON b.band_id = bpf.band_id 
and @festId = bpf.fest_id
where bpf.fest_id is null

答案 1 :(得分:0)

当你说" Invert"时,你需要解释你的意思。这个。你的意思是你想要所有没有参加任何音乐节的乐队吗?或者所有没有参加特定节日的乐队?