我有以下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)
答案 0 :(得分:1)
它返回错误值的原因是因为select
中的列不在group 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
的{{1}}行加上所有具有NULL值的行。也许我误解了这个问题,但那是我的解释。
通过首先找到每个共享者的最大ID,然后将其连接回原始数据来查找这些行。
答案 1 :(得分:0)
这是GROUP BY
的正确结果。要获取为组返回的最后一条记录,您需要先查询内部查询,然后在外部查询中进行分组:
SELECT * FROM (
SELECT * FROM feed WHERE by_id = 1 ORDER BY feed_id DESC
) AS `a` GROUP BY sharer LIMIT 10
答案 2 :(得分:0)
试试这个
SELECT max(feed_id) as feed_id ,by_id ,sharer FROM feed
WHERE by_id = 1
GROUP BY sharer
ORDER BY feed_id DESC LIMIT 10