2012-05-02 3 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

いいえ、それは他の国で表示される名前を返します。私はメキシコだけに現れる名前が必要です(VallejoとBenedict)。 –

答えて

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 
関連する問題