以下是我在单个SQL Server过程中尝试做的事情:
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
有什么想法吗?
答案 0 :(得分:10)
这可以在一个声明中完成:
SELECT b.*
FROM TABLE_B b
JOIN TABLE_A a ON a.id2 = b.id2
WHERE a.id1 = @ID1
但这意味着如果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)
IN子句是等效的,但如果有重复项,则EXISTS会更快:
SELECT b.*
FROM TABLE_B b
WHERE b.id2 IN (SELECT a.id2
FROM TABLE_A a
WHERE a.id1 = @ID1)
答案 1 :(得分:1)
试试这个:
select * from TableB b where exists (select top 1 * from TableA a where a.ID2 = b.ID2)
答案 2 :(得分:1)
SELECT *
FROM TableB
WHERE ID2 IN (SELECT ID2 FROM TableA WHERE ID1 = @ID1)
一般来说,您不希望在SQL Server中进行任何类型的循环。尝试使用“基于设置”操作。
答案 3 :(得分:-2)
对于sql中的每个不起作用,您必须使用游标。
declare @id int
declare @id2 int
declare mycursor cursor for
select id2 from tablea where id=@id
open mycursor
fetch next from mycursor into @id2
while @@fetch_status = 0
begin
your code here
fetch next from mycursor into @id2
end
close mycursor
deallocate mycursor