2012-05-02 52 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子句,他看起來可能會有更好的表現。 – 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 
相關問題