Sql server 存储过程:返回表1中不在表2中的具有条件的行
有人能帮我用存储过程返回 表1中NoPro=AR102的表2中不存在的NoCond 表1Sql server 存储过程:返回表1中不在表2中的具有条件的行,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,有人能帮我用存储过程返回 表1中NoPro=AR102的表2中不存在的NoCond 表1 NoCond Cat 001 G 002 G 003 G 004 G 005 G 006 G 表2 NoPro NoCond Cat AR101 002 G AR101 005 G AR102 003 G AR102 006 G AR103 001 G AR103 005 结果应
NoCond Cat
001 G
002 G
003 G
004 G
005 G
006 G
表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的回答中尝试了一些例子,但没有一个奏效
谢谢 给你!编辑注释并在Sql Server Management Studio中运行。它采用
NoPro
作为参数。
ANSI_为空
去
正如下面他在回答中指出的,有几种方法可以实现实际的记录检索。在这种情况下,“不存在”是您的朋友。这段代码应该在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版或更高版本上使用,那么您的朋友除外:
SELECT NoCond FROM Table_1 T1
EXCEPT
SELECT NoCond FROM Table_1 T2 WHERE T2.NoPro = 'AR102'
对于Oracle,将“除”替换为“减”,同样适用-它通常更快。您使用的是哪种DBMS?博士后?甲骨文?对不起,忘了包括在内。这是SQL Server 2008和2012。如果任何答案解决了您的问题,请接受它,以便具有相同或类似问题的其他用户知道哪一个对您最有用。+1表示使用参数进行概括!问题是,在SQL Server中,我不时发现使用“不存在”或“除了”通常比使用左连接并与NULLJoe进行比较要快,谢谢,它可以工作!我现在遇到的问题是,它应该返回表_1中的NoCond和Name列,而表_2中不存在列名。我尝试在select for T1中添加列,但由于Name不是T2中的列,因此我得到了一个错误。Joe,我刚刚尝试在T1 select中使用NULL作为第二个参数,结果成功了。
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
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