[英]MySql full join (union) and ordering on multiple date columns
一個相當復雜的SQL查詢我可能會變得更加困難:我有兩個表:
新聞:newsid,datetime,newstext
圖片:pictureid,datetime,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
只是使用你的數據庫結構和你的查詢,因為在MySQL中沒有FULL OUTER JOIN,我認為解決方案可能是這樣的:
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)
)
我認為你的代碼最終會解決這個問題,你能否詳細解釋日期時間排序部分
SELECT *
FROM News FULL OUTER JOIN Picture
ON News.Datetime = Picture.Datetime ORDER BY DateTime Asc
您始終可以使用另一個查詢包裝查詢:
SELECT ..., IF(datetime1 IS NULL, datetime2, datetime1) as datetime, ... FROM
(
... your query ...
)
ORDER BY datetime
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.