有人可以通过存储过程帮助我返回 来自Table_1的NoCond在Table_2中不存在NoPro = AR102
TABLE_1
NoCond Cat
001 G
002 G
003 G
004 G
005 G
006 G
TABLE_2
NoPro NoCond Cat
AR101 002 G
AR101 005 G
AR102 003 G
AR102 006 G
AR103 001 G
AR103 005
结果应该是:
NoCond
001
002
004
005
在对问题#1598322的回复中尝试了一些例子,但都没有。
谢谢!
答案 0 :(得分:1)
你走了!编辑注释并在Sql Server Management Studio中运行它。它需要NoPro
作为参数。
ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Stackoverflow User #325521
-- Create date: 31/01/2014
-- Application:
-- Description:
-- Version: 1.0.0.0
-- =============================================
CREATE PROCEDURE dbo.dcsp_GetNoConds
@NoProID VARCHAR(16)
AS
BEGIN
SET NOCOUNT ON
SELECT T1.NoCond
FROM Table_1 T1 LEFT JOIN Table_2 T2
ON T1.NoCond = T2.NoCond
WHERE T2.NoCond IS NULL
AND T2.NoPro = @NoProID
END
GO
正如下面@JoePineda在他的回答中所指出的,有几种方法可以完成实际的记录检索。
答案 1 :(得分:1)
CREATE PROCEDURE MY_SP
@NOPRO VARCHAR(5)
AS
BEGIN
SELECT T1.NOCOND
FROM TABLE_1 T1
LEFT OUTER JOIN TABLE_2 T2
ON T1.NOCOND = T2.NOCOND
WHERE T2.NOCOND IS NULL
AND T2.NOPRO = @NOPRO
END
答案 2 :(得分:0)
在这种情况下,“NOT EXISTS”是你的朋友。此代码应该在Oracle和SQL Server中都可以使用 - 只需要很少的更改,在大多数其他DBMS中都是如此:
SELECT * FROM Table_1 T1
WHERE NOT EXISTS (
SELECT 1 FROM Table_2 T2
WHERE T1.NoCond = T2.NoCond
AND T2.NoPro = 'AR102'
)
如果您只需要 “NoCond”值并知道它将在SQL Server,2005或更高版本上使用,那么EXCEPT就是您的朋友:
SELECT NoCond FROM Table_1 T1
EXCEPT
SELECT NoCond FROM Table_1 T2 WHERE T2.NoPro = 'AR102'
对于Oracle,将“EXCEPT”替换为“MINUS”,同样适用 - 通常更快。