0

私の仕事はとても簡単ですが、解決策が見つかりません。「記事」と「カテゴリ」の2つのテーブルがあります

私の記事の表は次のようになります。

id | cat_id | title | content
1      1      Blah     Content 1
2      1      Blah2    Content 2
3      2      Blah3    Content 3

私のカテゴリテーブルは次のようになります。

id | title
1     Category 1
2     Category 2

同じcat_idを持つ記事が2つあります。cat_idフィールドが重複していません。すべてのフィールドを削除したいので、すべての記事を取得するため、DISTINCTを使用できません。

したがって、このようにDISTINCTを使用する場合:

SELECT DISTINCT a.id、a.cat_id、a.title、a.content FROM articles AS a

私はすべてを出しますが、私はこのような出力が欲しいです

id | cat_id | title | content
2      1      Blah2    Content 2
3      2      Blah3    Content 3

誰かが私を助けてくれますか!!!

4

3 に答える 3

0

テストされていませんが、動作するはずです:

; WITH cte AS (
   SELECT
      *
      ,ROW_NUMBER() OVER (PARTITION BY cat_id ORDER BY id DESC) AS RowNum
)
SELECT
   *
FROM cte
WHERE RowNum = 1;
于 2010-07-26T20:40:46.260 に答える
0

このクエリは、各カテゴリから最初の記事(最小ID)を選択します

SELECT a.* FROM Article a LEFT JOIN 
   Article a2 ON a.id<a2.id AND a.cat_id=a2.cat_id
WHERE a2.id IS NULL

それは他のすべての記事との外部結合を行います。join句は、同じカテゴリでIDが小さい記事のみを結合します。一致するものがない場合(a2.idがNULLの場合)、そのカテゴリのIDが最小の記事があります。

于 2010-07-26T20:41:45.057 に答える
0

これを試して:

select article.*
    from article
        join (select min(id) as id, cat_id from article group by cat_id) a2
            using (id);

また:

select *
    from article
    where id in (select min(id) from article group by cat_id);

どちらも、個別のcat_idごとに(min()を使用して)1つの記事IDを選択し、これらのIDを持つレコードのみを選択します。

于 2010-07-26T20:59:49.213 に答える