2012-05-02 2 views
0

은 멕시코 이외의 국가에서는 표시되지 않는 이름을 선택하고 싶습니다.주어진 열 2의 값만 포함하는 열 1의 값을 가져 오는 방법은 무엇입니까?

Country  | Name  
-------------|------------ 
Mexico  | Vallejo 
Mexico  | Rachel 
United States| Rachel 
UK   | Rachel 
Australia | Rachel 
Mexico  | Amy 
Canada  | Amy 
Mexico  | Annette 
Mexico  | Jennifer 
Swahili  | Jennifer 
Mexico  | Benedict 

올바른 쿼리는 다음 이름 만 반환합니다.

아이디어가 있으십니까? 이것은 DISTINCT와 WHERE 조건이 혼합 된 것인지 잘 모르겠습니다.

+0

아니요, 다른 국가에 나타나는 이름을 반환합니다. 멕시코에만 나타납니다 (발레 호와 베네딕트). –

답변

1

난 당신이 원하는 생각 뭔가 같은

SELECT Name 
FROM <table> 
WHERE Country = 'Mexico' 
AND Name NOT IN (
    SELECT Name 
    FROM <table> 
    WHERE Country <> 'Mexico') 
2
SELECT 
     Name 
    FROM table 
    WHERE Name NOT IN 
    (
    SELECT DISTINCT 
      Name 
     FROM table 
     WHERE Country != 'Mexico' 
) 
+0

Whups. 나를 때려. 그의 WHERE 절은 WHERE 절이 추가되어 성능이 향상 될 수 있습니다. – akatakritos

+0

걱정하지 마세요 :) 지금 사용해보세요. –

1

Click here to view the demo in SQL Fiddle using MySQL.

스크립트 :

CREATE TABLE mytable 
(
    country VARCHAR(30) NOT NULL 
    , name VARCHAR(30) NOT NULL 
); 

INSERT INTO mytable (country, name) VALUES 
('Mexico',   'Vallejo'), 
('Mexico',   'Rachel'), 
('United States', 'Rachel'), 
('UK',    'Rachel'), 
('Australia',  'Rachel'), 
('Mexico',   'Amy'), 
('Canada',   'Amy '), 
('Mexico',   'Annette'), 
('Mexico',   'Jennifer'), 
('Swahili',  'Jennifer'), 
('Swahili',  'Steve'),'), 
('Swahili',  'Jill'), 
('Mexico',   'Benedict'); 

SELECT  name 
FROM  mytable 
GROUP BY name 
HAVING  AVG((CASE WHEN country = 'Mexico' THEN 1 ELSE 0 END) * 1.) >= 1 

출력 :

NAME 
-------- 
Annette 
Benedict 
Vallejo 
관련 문제