0

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

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

4 回答 4

1

这不是一个案例EXISTS- 一个简单的

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

会做。

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

于 2013-10-02T17:34:40.910 回答
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'
);

(我只给出这个答案是因为我记得在我的研究生数据库课程中学习关系代数时被问到类似的愚蠢查询,所以我想我知道你为什么问这个。)

于 2013-10-02T17:38:42.427 回答
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'
于 2013-10-02T17:45:33.423 回答
0

如果简单查询正在做同样的事情,请不要使用子查询

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

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

于 2013-10-03T05:52:34.897 回答