1

カテゴリ、ストーリー、用語の 3 つのテーブルがあります。ターム テーブル ストア カテゴリとストーリーの関係。各ストーリーには、1 つ以上のカテゴリを割り当てることができます。ストーリーのカテゴリを 1 つだけ選択したい。story_id で句を使用DISTINCTしましたが、機能しませんでした。次のクエリを参照してください

SELECT DISTINCT S.story_id, C.cat_id 
  FROM stories S JOIN terms C USING(story_id) 
 LIMIT 3;

と結果

+------------+--------+
| | ストーリーID | cat_id |
+------------+--------+
| | 115 | 17 |
| | 115 | 20 |
| | 115 | 21 |
+------------+--------+
3 行セット (0.00 秒)

一意のstory_idを取得しない理由の手がかりはありますか?

4

3 に答える 3

5

...一意のstory_idを取得しない理由は何ですか?

個々の列ではなく、句内のすべての列DISTINCT適用されるため、一意の story_id は返されません。SELECT


...ストーリーのカテゴリを1 つだけ選択したいので...集計関数MIN()またはMAX()withGROUP BYを使用してそれを行うことができます

SELECT s.story_id, MIN(c.cat_id) cat_id
  FROM stories s JOIN terms c 
    ON s.story_id = c.story_id
 GROUP BY s.story_id

戻るだけstory_idで、cat_id参加する必要さえないのでstoriesterms

SELECT story_id, MIN(cat_id) cat_id
  FROM terms
 GROUP BY story_id 

これがSQLFiddleのデモです

于 2013-07-25T04:00:23.410 に答える
1

DISTINCT S.story_id, C.cat_idstory_id と cat_id の両方を 1 つのエンティティと見なし、重複を削除します。区別する必要がある場合は、story_id以下を試すことができます

SELECT S.story_id, C.cat_id FROM stories AS S
INNER JOIN terms AS C ON(S.cat_id = C.cat_id)
GROUP BY S.story_id
HAVING COUNT(*) >=1
于 2013-07-25T04:01:00.177 に答える