저는 여기에 하나의 SQL 서버 절차에 할 노력하고있어입니다 :SQL 서버/같은 저장 프로 시저에서 선택
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
어떤 아이디어?
저는 여기에 하나의 SQL 서버 절차에 할 노력하고있어입니다 :SQL 서버/같은 저장 프로 시저에서 선택
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
어떤 아이디어?
. 그 상황에서 사용은 오히려 이전 쿼리에 DISTINCT 추가하는 대신 EXISTS :
SELECT b.*
FROM TABLE_B b
WHERE EXISTS(SELECT NULL
FROM TABLE_A a
WHERE a.id2 = b.id2
AND a.id1 = @ID1)
IN 절은 동일하지만 중복이있는 경우 빨라집니다 존재합니다
SELECT b.*
FROM TABLE_B b
WHERE b.id2 IN (SELECT a.id2
FROM TABLE_A a
WHERE a.id1 = @ID1)
및 A.ID1 = @ ID1 ... – Jonathan
이 시도 :
SELECT b.*
FROM TABLE_B b
JOIN TABLE_A a ON a.id2 = b.id2
WHERE a.id1 = @ID1
그러나이 TABLE_A에 하나 개 이상의 레코드가 TABLE_B 레코드에 관련된 경우 중복이된다는 것을 의미합니다 : 하나의 문으로 수행 할 수 있습니다
select * from TableB b where exists (select top 1 * from TableA a where a.ID2 = b.ID2)
SELECT *
FROM TableB
WHERE ID2 IN (SELECT ID2 FROM TableA WHERE ID1 = @ID1)
일반적으로 , 당신은 SQL Server에서 어떤 종류의 루핑도하고 싶지 않습니다. "Set based"작업을 사용해보십시오.
코드 또는 XML을 게시하는 경우 텍스트 편집기에서 해당 줄을 강조 표시하고 편집기 도구 모음에서 "코드"단추 (101 010)를 클릭하여 멋지게 형식을 지정하십시오 구문 강조! –
포맷팅은 SQL의 경우 매우 좋으므로 걱정하지 않아도됩니다. 진짜로 당신을 괴롭히는 경우에, 당신은 포스트를 편집하게 자유 롭다. – StingyJack
sql에서 각각의 나던 한 작업에 대해 커서를 사용해야합니다.
declare @id int
declare @id2 int
declare mycursor cursor for
select id2 from tablea where [email protected]
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
커서가 악합니다! – Jonathan
코드 또는 XML을 게시하는 경우 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드"버튼 (101 010)을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –
아니요, 저는 항상 그것을 사용합니다. 그러나 절대로 그 문제는 없습니다. 단 하나의 절이 필요하다면 그는 존재하거나 조인 절을 사용할 수 있지만 커서와 forech는 같은 효과를냅니다 – elchente23
테이블 구조와 필요한 출력은 무엇입니까? 뭐, 정확히하려고 했니? 여기? – AllenG
TableB의 각 select에 대해 별도의 결과 집합을 원합니까? 아니면 모든 행을 포함하는 단일 결과 집합이 반환 되었습니까? – SqlRyan
하나의 결과 집합이 필요합니다. – asmo