mysql联合排序_MySql完全连接(联合)和多个日期列的排序

一个相当复杂的SQL查询,我可能会变得更加困难,它应该是:

我有两个表格:

新闻:

newsid,datetime,newstext

图片:

图片,日期时间,imgPath

这两个不相关,我只是加入了创建新闻/图片的日期

迄今为止的SQL:

SELECT * FROM news as n LEFT OUTER JOIN (SELECT count(pictureid), datetime

FROM picture GROUP BY DATE(datetime)) as p ON DATE(n.datetime) = DATE(p.datetime)

UNION

SELECT * FROM news as n RIGHT OUTER JOIN (SELECT count(pictureid),

datetime FROM picture GROUP BY DATE(datetime)) as p ON

DATE(n.datetime) = DATE(p.datetime)我必须使用union来模拟MySQL中的完整外连接。

结果:

newsid text datetime count() datetime

1 sometext 2011-01-16 1 2011-01-16

2 moo2 2011-01-19 NULL NULL

3 mooo3 2011-01-19 NULL NULL

NULL NULL NULL 4 2011-01-14问题是,我显然最终会得到两个日期栏 - 一个来自新闻,另一个来自图片,这意味着我不能按日期排序并且按照正确的顺序排列!有任何想法吗?即使这意味着重构数据库!我需要约会在一个专栏。

答案来自SeRPRo

完成的工作代码是:

SELECT `newsid`, `text`,

CASE

WHEN `datetime` IS NULL

THEN `pdate`

ELSE `datetime`

END

as `datetime`,

`pcount` FROM

(

(SELECT * FROM news as n LEFT OUTER JOIN

(SELECT count(pictureid) as pcount, datetime as pdate FROM picture GROUP BY DATE(datetime)) as p

ON DATE(n.datetime) = DATE(p.pdate) ORDER BY datetime

)

UNION

(SELECT * FROM news as n RIGHT OUTER JOIN

(SELECT count(pictureid) as pcount, datetime as pdate FROM picture GROUP BY DATE(datetime)) as p

ON DATE(n.datetime) = DATE(p.pdate) ORDER BY datetime

)

) as x

ORDER BY datetime

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值