gpt4 book ai didi

MySql 完全连接(联合)并在多个日期列上排序

转载 作者:可可西里 更新时间:2023-11-01 06:49:19 28 4
gpt4 key购买 nike

一个相当复杂的 sql 查询,我可能会使其变得比它应该的更难:我有两个表:

新闻:newsid, datetime, newstext

图片:pictureid, 日期时间, 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

最佳答案

只需使用您的数据库结构和查询,并且由于 FULL OUTER JOIN 在 MySQL 中不可用,我认为解决方案可能是这样的:

SELECT
`newsid`,
`text`,
CASE
WHEN `datetime` IS NULL THEN `pdate`
ELSE `datetime`
END as `datetime,
`pcount`
(
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.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.datetime)

)

关于MySql 完全连接(联合)并在多个日期列上排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792577/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com