[英]MySQL field from UNION SUBSELECT
我的數據庫具有下表:
我有以下用例:我需要獲取每個博客文章的最新評論的ID以及博客文章本身。 最新的注釋可能在t3或t4表中。
我想出了以下sql,但無法正常工作。
SELECT t1.id,
t1.one,
t1.two,
(
SELECT id FROM (
(SELECT * FROM t3 where t3.refid = t1.id)
UNION (SELECT * FROM t4 where t4.refid = t1.id)
ORDER BY datetime ASC LIMIT 1
) AS tempTable)
AS someValue
FROM t1
LEFT JOIN t2 ON (t1.id = t2.id)
WHERE t1.otherid=42 AND t1.somefield > 0
ORDER BY t1.someOtherField
LIMIT 5
非常感謝關於是否和/或如何實現的任何提示,謝謝!
您需要將包含來自t3和t4的最新注釋的表編譯到表d
然后還將這兩個結果合並到注釋表c
此c
將僅保存1個條目,即最近的id,或者來自t3
或來自t4
ct
會告訴您從哪個表獲得響應;
SELECT t1.*,
t2.*,
c.id AS cid,
c.dt AS dt,
c.t AS t
FROM t1
LEFT JOIN t2
ON ( t1.id = t2.id )
LEFT JOIN (SELECT d.id,
Max(d.dt) AS dt,
d.refid,
d.t AS t
FROM (SELECT t3.id,
Max(DATETIME) AS dt,
t3.refid,
3 AS t
FROM t3
GROUP BY t3.refid
UNION ALL
SELECT t4.id,
Max(DATETIME) AS dt,
t4.refid,
4 AS t
FROM t4
GROUP BY t4.refid) d
GROUP BY d.refid) c
ON c.refid = t1.id;
首先嘗試此查詢,它應該返回t3和t4的最新評論-
SELECT t_comments1.* FROM (SELECT * FROM t3 UNION SELECT * FROM t4) t_comments1
JOIN (SELECT refid, MAX(datetime) max_datetime FROM (SELECT * FROM t3 UNION SELECT * FROM t4) t GROUP BY t.refid) t_comments2
ON t_comments1.refid = t_comments2.refid AND t_comments1.datetime = t_comments2.max_datetime;
如果可以,請讓我們將此查詢與t1表結合起來-
SELECT t1.*, t_comments.* FROM t1
LEFT JOIN (
SELECT t_comments1.* FROM (SELECT * FROM t3 UNION SELECT * FROM t4) t_comments1
JOIN (SELECT refid, MAX(datetime) max_datetime FROM (SELECT * FROM t3 UNION SELECT * FROM t4) t GROUP BY t.refid) t_comments2
ON t_comments1.refid = t_comments2.refid AND t_comments1.datetime = t_comments2.max_datetime
) t_comments
ON t1.id = t_comments.refid;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.