0

次のmysqlクエリがあります-:

私はテーブルを持っています - >

feed_id | by_id | sharer

次の値があります->

 (1 , 1 , NULL)  , (2, 1, iop_23) , (3, 1, iop_23)

このクエリを実行します SELECT * FROM feed WHERE by_id = 1 GROUP BY sharer ORDER BY feed_id DESC LIMIT 10

このクエリでは、sharer = NULL、または NULL でない場合は一意の値を持つ行をフェッチしようとしています。

戻るはずです->(1 , 1 , NULL) , (3, 1, iop_23)

しかし、それは戻ってきています - >(1 , 1 , NULL) , (2, 1, iop_23)

4

3 に答える 3

1

間違った値を返す理由は、にない列がありselectgroup by集計関数がないためです。結果は不確定です。

最大のIDを持つものが必要な場合:

select s.*
from sharer s left outer join
     (select sharer, max(feed_id) as maxf
      from feed
      group by sharer
     ) sf
     on s.feed_id = maxf
where s.sharer is null or sf.sharer is not null

すべての NULL 値を取得するには、左外部結合が必要です。where句は、一方で NULL 値と他方で最大 ID 行の間で選択することです。

idそれぞれに最大sharerの行と NULL 値を持つすべての行が必要なようです。質問を誤解しているかもしれませんが、それが私の解釈です。

これは、最初に各共有者の最大 ID を見つけ、次にこれを元のデータに結合することによって、これらの行を見つけます。

于 2013-03-05T20:34:02.060 に答える