如何使用子查询存在?

时间:2013-10-02 17:31:02

标签: mysql

嗨我正在尝试显示每个制造商正在生产的所有饮料,除了使用存在的碳酸化饮料和子查询但它给我一个空的套装请帮帮我

mysql> 'select * from drink';
+----------------+------------+----------------+
| name           | type       | manf           |
+----------------+------------+----------------+
| Coca-cola zero | carbonated | Coca-Cola      |
| Mirinda        | carbonated | PepsiCo        |
| Big Apple      | carbonated | Murree Brewery |
| Big Lemon      | carbonated | Murree Brewery |
| Big Orange     | carbonated | Murree Brewery |
| Peach Malt     | malt       | Murree Brewery |
| Lemon Malt     | malt       | Murree Brewery |
| Apple Malt     | malt       | Murree Brewery |
| New Coke       | carbonated | Coca-Cola      |
| Diet Coke      | carbonated | Coca-Cola      |
| Pepsi          | carbonated | PepsiCo        |
| Fruita vitals  | Juice      | Nestle         |
| Twister        | Juice      | Shezan         |
| Nescafe        | cofee      | Nestle         |
| Cappuccino     | Cofee      | Gloria Jeans   |
| Caffe Latte    | Cofee      | Gloria Jeans   |
| Flat White     | Cofee      | Gloria Jeans   |
+----------------+------------+----------------+
17 rows in set (0.00 sec)

查询我试过,但它没有给我一个结果

SELECT * FROM drink WHERE NOT EXISTS (SELECT * FROM drink WHERE drink.type = 'carbonated');

4 个答案:

答案 0 :(得分:1)

这不是EXISTS的情况 - 一个简单的

SELECT * FROM drink WHERE `type`<>'carbonated' 

会做的。

如果这不是您所追求的,则需要更新您的问题以使其更具体。

答案 1 :(得分:0)

Eugen所说的是正确的,使用EXISTS这是非常无用的,并且通常是错误的。但如果你真的想让它工作,它可能看起来像这样:

SELECT * FROM drink A WHERE NOT EXISTS (
    SELECT * FROM drink B WHERE A.name = B.name AND A.manf = B.manf AND B.type = 'carbonated'
);

(我只是给出了这个答案,因为我记得在我的研究生数据库课程中被要求进行类似的愚蠢查询时,我会想到你为什么要这样做。)

答案 2 :(得分:0)

不确定你的目标。

如果要从所有制造商中选择所有饮料,除了有碳酸饮料的制造商这样做。

Select
   * 
From Drink d1
Where Not Exists
    (   Select * 
        From Drink d2 
        Where d2.Manf = d1.Manf
          And d2.Type = 'carbonated');
    )

如果它只是选择所有未碳化的饮料,那就更简单了。

Select
   * 
From Drink 
Where Type <>'carbonated'

答案 3 :(得分:0)

如果简单查询执行相同的操作,请不要使用子查询

SELECT * FROM drink WHERE `type` <> 'carbonated'

子查询会降低系统速度,也不需要子查询来执行此操作。这些技术可提高您的应用速度。想想未来如果你有15000条记录子查询会减慢你的应用程序。