0

我想选择出现在墨西哥而不出现在任何其他国家/地区的名称。

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 

正确的查询只会返回以下名称。

Name      
---------
Annette
Benedict
Vallejo

有任何想法吗?我不确定这是否可能是 DISTINCT 和 WHERE 条件的混合。

4

3 回答 3

2
SELECT 
      Name 
  FROM table 
  WHERE Name NOT IN 
  (
    SELECT DISTINCT 
          Name 
        FROM table 
        WHERE Country != 'Mexico'
  )
于 2012-05-02T03:51:11.407 回答
1

我想你想要类似的东西

SELECT Name
FROM <table>
WHERE Country = 'Mexico'
AND Name NOT IN (
    SELECT Name
    FROM <table>
    WHERE Country <> 'Mexico')
于 2012-05-02T03:50:03.540 回答
1

单击此处查看使用 MySQL 的 SQL Fiddle 演示。

脚本:

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
于 2012-05-02T04:41:59.410 回答