2012-12-07 4 views
0

나는이 구조를 tbl_site_urls이 : 사이트의 저장 URL을다른 표에 일치하는 항목이없는 행을 선택 하시겠습니까?

tbl_camp_urls : 캠페인의 저장 URL을, 해당 URL을 tbl_site_urls

id - site_id - url 
1 - 181  - url1 
2 - 182  - url2 
3 - 189  - url3 

tbl_camp_urls

id - camp_id - site_id - url 
1 - 5  - 181  - url1 

내가 원하는 경우 처리 후 url을 처리 할 필요가있다.

select url from tbl_site_urls 
    join site on tbl_site_urls.site_id = site.id AND site.valid=1 

는 루프 작업에서 나는 내가 URL을 아직 처리하지 않은 것을 나열 할 tbl_camp_urls

로 처리하는 URL을 삽입합니다. 비교 작업과 같습니다. 내가 기대하고있어

결과이 그것을해야

2 - 182  - url2 
3 - 189  - url3 

답변

1

입니다 :

select * from tbl_site_urls where url not in (select url from tbl_camp_urls) 

+0

감사합니다. –

+0

위대한 :-), 그때 대답 외에 체크 표시를 클릭하는 것은 사용자 정의 ... – MortenSickel

4
SELECT a.urls 
FROM tbl_site_urls as a 
LEFT JOIN tbl_camp_urls as b 
ON a.site_id = b.site_id 
WHERE b.site_id IS NULL; 
+0

두 번째 테이블의 _all_ 행을 반환 할 필요가 없으므로 올바른 대답입니다. – dotancohen

+0

완벽 ... 내 엉덩이를 구해 줬어. 내 머리가 너무 막혀서 마지막 부분 인'WHERE b.site_id is NULL'을 생각할 수 없었습니다. 감사. +1. – Fr0zenFyr

0

(IT에 대한 추가 정보를 원하시면 서브 쿼리 검색) 내 논리는 커먼즈 값을 알기 위해 교차로를 만들 필요가 있다고 알려줍니다. 차 노조는 그들을 제거하기 :

먼저 모든 값을 얻을 :

이런 식으로 뭔가해야

(select site_id from tbl_site_urls) 
union 
(select id from site) 

당신이 공유지의 값을 가져 오는 방법이입니다 만

(select url from tbl_site_urls inner join site on tbl_site_urls.site_id = site.id) 

이제 이러한 검색어를 함께 입력하십시오.

select * from (select site_id from tbl_site_urls 
union 
select id from site) as tem_table 
where 
site_id not in 
(select url from tbl_site_urls inner join site on tbl_site_urls.site_id = site.id) --commons values 
+0

또는 더 쉽게 선택할 수 있습니다. (선택 ...) ... – MortenSickel

+0

에없는 곳은 2 테이블에서 반복되지 않는 1 테이블의 값만 제공합니다. 'tbl_camp_urls' 테이블의 값이 다르면 나타나지 않을 것입니다. – jcho360

+0

OP가 원하는 부분을 볼 수 있습니다 ...? – MortenSickel

관련 문제