0

使用しているもの: Ubuntu 12 上の最新の MySQL。

セットアップ: 各従業員の「名前」と「時間」を含むテーブル「EmployeePayment」があるとします。すでに値が入力されているとします。

質問: コマンドを使用する場合

select * from EmployeePayment where Name in ('');

期待どおり、空のセットを取得します。しかし、私が使用するとき

select * from EmployeePayment where Name in ('' or '');

テーブル全体が返されます。さらに、私がうるさいとコマンドを入力すると

select Name, SUM(Hours) from EmployeePayment where Name in ('' or '');

次に、テーブルの最上位の名前だけを返します。この「in」コマンドで何が起こっているのでしょうか?

4

3 に答える 3

5

まず、を取り除く必要があります。句orの適切な構文では、次のinようにコンマを使用して可能性を区切ります。

sql> select name from people where status in ('intelligent', 'good looking')
pax
1 row returned

現在のバリアントが行っていることは、or演算子を適用して 1 要素のインリストを提供することです。詳しくはこちらをご覧ください。

集計されたクエリで 1 行しか得られない理由は、group by句がないためです。つまり、すべての行をグループ化しています。ほとんどの DBMS は、グループ化の一部ではない集計されていない列があることについて文句を言いますが、MySQL は少し派手ではなく、その点でルールが緩いです。

明らかにテーブル全体をグループ化していますが(そうあるべきです)、デフォルトの集計関数を名前に適用しています(おそらくそうすべきではありませんが、ドキュメントによるとそうしています)。

この MySQL 拡張機能についてはここで取り上げます、警告に注意してください。列の同じ値。

于 2013-06-14T23:13:08.833 に答える