1

申し訳ありませんが、例がどこにも見つかりません。主な理由は、DISTINCTまたはUNIQUE(SQLで誤解を招く用語であることがわかった)を含まない例を説明する他の方法が考えられないためです。

1つのテーブルから一意の値とnull値を選択する必要があります。

FLAVOURS:
id  |  name  |  flavour
--------------------------
1   |  mark  |  chocolate
2   |  cindy |  chocolate
3   |  rick  |  
4   |  dave  |  
5   |  jenn  |  vanilla
6   |  sammy |  strawberry
7   |  cindy |  chocolate
8   |  rick  |  
9   |  dave  |  
10  |  jenn  |  caramel
11  |  sammy |  strawberry

独特の味わい(バニラ、キャラメル)の子供と味のない子供が欲しいです。

味が重複している子供(チョコレート、イチゴ)は欲しくない。

ヘルプを検索すると、チョコレートとストロベリーのGROUP BY、UNIQUE、DISTINCTの方法に対する答えが常に返されます。それは私が望んでいることではありません。フィールドで繰り返し用語を使用したくない-他のすべてが必要です。

このための適切なMySQLselectステートメントは何ですか?

ありがとう!

4

3 に答える 3

1

HAVINGを使用して一部のグループのみを選択できるため、フレーバーが1つしかないグループを選択するには、次を使用します。

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1

次に、NULLエントリを持つユーザーを選択する場合は、次を使用します。

SELECT * FROM my_table WHERE flavour IS NULL

そして、それらを組み合わせると、固有のフレーバーを持つか、NULLになるすべてのエントリを取得します。

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1 AND flavour IS NOT NULL
UNION
SELECT * FROM my_table WHERE flavour IS NULL

「フレーバーISNOTNULL」を追加したのは、それが単一のフレーバーである場合にNULLであるフレーバーが選択されないようにするためであり、重複が生成されます。

于 2013-02-20T18:36:48.117 に答える
0

手元にあるデータベースはありませんが、の行に沿ってクエリを使用できるはずです。

FLAVORSからのSELECT名WHEREフレーバーIN(SELECT flavour、count(Flavour)from FLAVORS where count(Flavour)= 1 GROUP BY flavour)ORflavor IS NULL;

これが正しくない場合はお詫び申し上げますが、良いスタートとなることを願っています。

于 2013-02-20T18:24:39.720 に答える
0

重複を探す自己結合が必要です。次に、一致するものがなかった場合(つまり、WHERE t2.flavor IS NULL)を探して、それらの重複を拒否する必要があります。次に、WHERE句の2行目(またはt1.flavor IS NULL)を使用して、元のテーブルでnullを探して、まったく異なることを実行しています。

SELECT DISTINCT t1.name, t1.flavor 
FROM tablename t1
LEFT JOIN tablename t2
ON t2.flavor = t1.flavor AND t2.ID <> t1.ID
WHERE t2.flavor IS NULL
OR t1.flavor IS NULL

これがお役に立てば幸いです。

于 2013-02-20T18:38:03.583 に答える