【问题标题】:Select max time from second table JOIN从第二个表中选择最大时间 JOIN
【发布时间】:2016-10-18 10:05:09
【问题描述】:
SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description
FROM questions q
LEFT JOIN (
     SELECT question_id, crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer
     FROM answers
     GROUP BY question_id
     ORDER BY crdate DESC
) a ON q.uid = a.question_id
WHERE q.deleted = 0 AND q.answers > 0 

我想从第一个表中选择 uid、标题和类别 ID,从第二个表中选择所有文本和 MAX 个答案的 crdate。此查询选择 Min crdate。我应该如何改变它?

UPD 我有表格问题和答案。作为表格的名称,我选择问题和答案。一个问题可能有多个答案。我想将所有答案合并到一个变量中(稍后将一些变量合并到一个变量中以进行全文搜索)并选择最后一个答案的 crdate。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个

    SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description
    FROM questions q
    LEFT JOIN (
         SELECT question_id, max(crdate) as crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer
         FROM answers
         GROUP BY question_id
         ORDER BY crdate DESC
    ) a ON q.uid = a.question_id
    WHERE q.deleted = 0 AND q.answers > 0 
    GROUP BY q.uid
    

    【讨论】:

    • 很奇怪,但是是的
    • 它只会从答案表中给出最大值
    【解决方案2】:

    使用两个连接:

    SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description
    FROM questions q LEFT JOIN 
         (SELECT a.question_id, a.crdate, GROUP_CONCAT(a.text SEPARATOR '|| ') answer
          FROM answers a JOIN
               (SELECT a2.question_id, MAX(a2.crdate) as maxcr
                FROM answers a2
                GROUP BY a2.question_id
               ) a2
               ON a2.question_id = a.question_id and a2.maxcr = a.crdate
          GROUP BY question_id
         ) a
         ON q.uid = a.question_id
    WHERE q.deleted = 0 AND q.answers > 0 
    GROUP BY q.uid;
    

    最里面的子查询获取问题答案的最大创建日期。中间子查询做你想做的事,将答案连接在一起。

    目前尚不清楚外部GROUP BY 在做什么。真的有必要吗?你为什么使用没有聚合函数的GROUP BY?外部SELECT 中的其他列应该使用什么值?您的问题没有提供足够的信息来解决这些问题,但即使在获得最新的crdate 以获取答案后,查询仍然看起来很可疑。

    【讨论】:

    • 你是对的,group by 是没有必要的。我已经更新了我的问题。
    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多