0

我很难找到与我想要实现的目标类似的例子。我有 3 张桌子。我想从一张表中获取链接 ID 号。从另一个表中,我想找到相同的 ID,并在该表中添加另一列数字,其中第一个表中的 ID 号匹配。然后在第三张表上,即文本,我想将 ID 与主 ID 号匹配的所有文本组合在一起......并在 1 中返回所有这些。我的图表应该显示我的意思:

因此,有 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

票号 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
4

2 回答 2

2

如果您确实需要使用单个查询来执行此操作,则解决方案是在其中一个关节中执行子查询。

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
于 2012-10-10T20:33:30.807 回答
0

试试这个查询 -

SELECT
  t.id,
  t.person_id,
  SUM(tc.charge_time) Seconds,
  GROUP_CONCAT(LEFT(tm.message, 20)) Message
FROM
  tickets t
LEFT JOIN ticket_charges ts
  ON ts.ticket_id = t.id
LEFT JOIN tickets_messages tm
  ON tm.ticket_id = t.id
GROUP BY
  t.id;

请注意,我使用了 'LEFT(tm.message, 20 )',因为GROUP_CONCAT函数有长度限制 - group_concat_max_len

于 2012-10-11T08:44:20.577 回答