asm*_*smo 0 sql t-sql sql-server stored-procedures
这是我在单个SQL Server过程中尝试做的事情:
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
OMG*_*ies 10
这可以在一个声明中完成:
SELECT b.*
FROM TABLE_B b
JOIN TABLE_A a ON a.id2 = b.id2
WHERE a.id1 = @ID1
Run Code Online (Sandbox Code Playgroud)
但这意味着如果TABLE_A中的多个记录与TABLE_B记录相关,则会出现重复.在这种情况下,使用EXISTS而不是将DISTINCT添加到上一个查询:
SELECT b.*
FROM TABLE_B b
WHERE EXISTS(SELECT NULL
FROM TABLE_A a
WHERE a.id2 = b.id2
AND a.id1 = @ID1)
Run Code Online (Sandbox Code Playgroud)
IN子句是等效的,但如果有重复项,则EXISTS会更快:
SELECT b.*
FROM TABLE_B b
WHERE b.id2 IN (SELECT a.id2
FROM TABLE_A a
WHERE a.id1 = @ID1)
Run Code Online (Sandbox Code Playgroud)