2010-04-19 3 views
0

SQL 문이 하나 있습니다.이 두 SQL 문을 같은 기능을 가진 것으로 만듭니다.

select linkscat.id, linkscat.category 
from linkscat, contentlinks, links 
where contentlinks.linksid = links.id 
    and contentlinks.contentid = @contentid 
    and links.linkscatid = linkscat.id 
order by linkscat.category 

그리고 sql 문 2는 위 문에서 'id'인 @linkscat라는 매개 변수를 사용합니다.

select * from links where linkscatid= @linkscat 

나는 등 많은 SqlDataReader를, 중첩 된 리피터를 사용하려고 문제의 모든 유형의 실행 해요,하지만 모든 작업이 하나 개의 문장으로 수행 할 수 있다면 그것은 좋은 것? 이것이 가능합니까? 그렇다면 최종 명세서를 게시하여 도움을받을 수 있습니까?

대단히 감사합니다.

답변

2

는 조인

select linkscat.id, linkscat.category, links.link, links.name 
from linkscat 
    inner join links 
    on links.linkscatid = linkscat.id 
    inner join contentlinks 
    on contentlinks.linksid = links.id 
where contentlinks.contentid = @contentid 
order by linkscat.category 
0

방법 그러나

select * from links where linkscatid in (
    select linkscat.id 
    from linkscat, contentlinks, links 
    where contentlinks.linksid = links.id 
     and contentlinks.contentid = @contentid 
     and links.linkscatid = linkscat.id 
    order by linkscat.category) 

에 대해 나는 테이블 형식의 불확실입니다. 아마도 select * from links where id in ... 일 것입니다. 내가 대신 *를 사용하는 경우에만 필수 필드를 명시 할 비록

select linkscat.id, linkscat.category, links.* 
from linkscat, contentlinks, links 
where contentlinks.linksid = links.id 
    and contentlinks.contentid = @contentid 
    and links.linkscatid = linkscat.id 
order by linkscat.category 

, 그리고 명시 적으로 사용하는 것이 조인 : 당신은 단순히 선택 절에 원하는 필드를 추가 할 수 있도록 이미 사용하고있는

0

링크 테이블에서 필요한 필드를 쿼리에 직접 추가 할 수 있어야합니다. *보다는 링크 테이블에서 실제 필드 이름을 사용하는 것이 좋습니다.

select linkscat.id, linkscat.category, links.field_1, links.field_2, ... 
    from linkscat, contentlinks, links 
    where contentlinks.linksid = links.id 
     and contentlinks.contentid = @contentid 
     and links.linkscatid = linkscat.id 
    order by linkscat.category 
관련 문제