我发现很难找到与我想要实现的目标类似的示例。我有3张 table 。我想从一张表中获取链接 ID 号。我想从另一个表中找到相同的 ID,并在该表中添加与第一个表中的 ID 号匹配的另一列数字。然后在第三个表(即文本)上,我想将 ID 与主 ID 号匹配的所有文本分组在一起......并一次性返回所有这些。我的图表应该表明我的意思:
因此,有 2 个查询将自行返回部分结果,但我正在努力将其构建为 1 个查询。
SELECT ticket_charges.ticket_id
, sum(ticket_charges.charge_time) AS Seconds
FROM
ticket_charges
LEFT OUTER JOIN tickets
ON ticket_charges.ticket_id = tickets.id
GROUP BY
ticket_charges.ticket_id
, tickets.id
票证 ID 3 的 77 和 937 已正确相加!!
SELECT tickets.id AS `Ticket Number`
, left(tickets_messages.message, 500) AS `Ticket Message`
FROM
tickets
INNER JOIN tickets_messages
ON tickets.id = tickets_messages.id
GROUP BY
tickets_messages.ticket_id
, tickets.id
消息已正确连接在一起。
我已经尝试过对消息进行一些串联、选择中的选择、不同的分组方法、一些总和等。但似乎无法得到结果,而我无法正确返回结果将两个查询作为 1 个单个查询。要么来自“charge_time”的连接数字非常错误并且与任何内容都不匹配,要么我最终在“charge_time”上得到数百条“消息”和奇怪的数字
仅供引用..如果我尝试这样做,我会得到“子查询返回超过 1 行”,但这是我认为我应该做的。
SELECT ticket_charges.ticket_id
, sum(ticket_charges.charge_time) AS Seconds
FROM
ticket_charges
LEFT OUTER JOIN tickets
ON ticket_charges.ticket_id = tickets.id
Where (SELECT left(tickets_messages.message, 500)
FROM
tickets
INNER JOIN tickets_messages
ON tickets.id = tickets_messages.id
GROUP BY
tickets.id)
GROUP BY
ticket_charges.ticket_id
, tickets.id
最佳答案
如果您确实需要通过单个查询来完成此操作,解决方案是在其中一个关节中执行子查询。
SELECT t.id, t.person_id, SUM(tc.charge_time), mc.concat
FROM tickets t
INNER JOIN tickets_charges tc ON tc.ticket_id = t.id
INNER JOIN (
SELECT ticket_id, GROUP_CONCAT(message SEPARATOR ' ') as concat
FROM tickets_messages
GROUP BY ticket_id) AS mc
ON mc.ticket_id = t.id
GROUP BY t.id
关于mysql - mysql 查询中的多重分组。组连接?通过...分组?内连接?我哪里错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826196/