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

単純なクエリが同じことをしている場合は、サブクエリを使用しないでください

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

サブクエリはシステムを遅くし、これを行うためにサブクエリは必要ありません。これらの手法により、アプリケーションの速度が向上します。サブクエリが 15,000 件のレコードを持っている場合、アプリケーションの速度が低下する可能性があります。

于 2013-10-03T05:52:34.897 に答える
0

オイゲンが言ったことは正しいです。これに 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 に答える