2013-02-27 2 views
1

에서 레코드 제시하지 가져 오기 :나는 두 개의 테이블이 다른 테이블

all_countries

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 1 ║ USA   ║ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 4 ║ France  ║ 
║ 5 ║ UK   ║ 
║ 6 ║ Australia ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 

supported_countries

╔════════════╦═══════════╦═══════════╗ 
║ COUNTRY_ID ║ COUNTRY ║ FILTER_ID ║ 
╠════════════╬═══════════╬═══════════╣ 
║   1 ║ USA  ║   1 ║ 
║   2 ║ China  ║   1 ║ 
║   3 ║ India  ║   1 ║ 
║   4 ║ France ║   2 ║ 
║   1 ║ USA  ║   2 ║ 
║   6 ║ Australia ║   2 ║ 
╚════════════╩═══════════╩═══════════╝ 

검색어 : 위의 예에 따라 그래서

SELECT a.* 
FROM all_countries a 
LEFT JOIN supported_countries s 
    ON a.id = s.country_id 
WHERE s.country_id IS NULL; 

I 가야 해.

UK 
Philippines 

그것은 잘 작동하지만 내가 = 2 를 필터링하도록 선택한 국가의 예를 필터링하는 경우, 내가 제로 결과를 얻을 것.

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 5 ║ UK   ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 

2. 내가 올바른 질문을하고 있는가 = 필터 경우 가정

SELECT a.* 
FROM all_countries a 
LEFT JOIN supported_countries s 
    ON a.id = s.country_id 
WHERE s.filter = 2 AND s.country_id IS NULL; 

내가,이 결과를 얻으려면 할 수?

답변

2

ON 절에 조건을 추가,

SELECT a.* 
FROM all_countries a 
     LEFT JOIN supported_countries s 
      ON a.id = s.country_id AND 
       s.filter_ID = 2  -- <<=== HERE 
WHERE s.country_id IS NULL; 

결과 :

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 5 ║ UK   ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 
+0

빠른 성능을 위해, 당신은이 컬럼에 인덱스가해야' a.id','s.country_id','s.filter_ID'. –

관련 문제