Mysql 如何从第一个表中选择所有行,并为从第一个表检索到的每一行获取其他表中所有匹配行的计数

Mysql 如何从第一个表中选择所有行,并为从第一个表检索到的每一行获取其他表中所有匹配行的计数,mysql,join,Mysql,Join,以下是表格 表1 price col1 col2 time 10 1 1 10 100 1 1 13 150 1 1 15 表2 id startTm endTm col1 col2 1 12 20 1 1 2 15 26

以下是表格

表1

price     col1     col2     time
10        1        1        10
100       1        1        13
150       1        1        15
表2

id     startTm     endTm     col1     col2
1      12          20        1        1
2      15          26        1        1
3      11          13        1        1
我希望表2中的所有行满足startTm>=x和endTm这是您想要的吗

SELECT startTm, endTm, COUNT(price), SUM(price), t3_others, t1_others
FROM
(
  SELECT T3.startTm AS startTm, T3.endTm AS endTm, T3.others AS t3_others, T1.price AS price, T1.others AS t1_others
  FROM T1
  RIGHT JOIN
  (
    SELECT T2.startTm, T2.endTm, T2.others
    FROM T2
    WHERE T2.startTm >= 10 AND T2.endTm <= 20 AND T2.col1 = col1_value AND T2.col2 = col2_value
  ) AS T3
  ON T1.time >= T3.startTm AND T1.time <= T3.endTm
) AS T4
GROUP BY startTm, endTm;
根据需要添加其他更多字段。

尝试以下查询:


从表1中选择t1.*,t2.*作为t1右键连接表2作为t1.col1=t2.col1上的t2,其中t2.startTm>=‘您的值’和t2.endTm更新了我的问题,以便更好地理解。请看一看@walterI想要表1中的所有价格的总和,这些价格的时间介于表2中已检索行的开始时间和结束时间之间。我已调整了查询。请尝试。它正在工作,但我无法从表2中选择更多的列,因为它们没有聚合。只需在上一个查询之外再添加一个select,然后按startTm和endTm分组,就可以得到您想要的。
startTm     endTm     totalNo     totalPrice     some more col
12          20        2           250            ...
11          13        1           100            ...
SELECT startTm, endTm, COUNT(price), SUM(price), t3_others, t1_others
FROM
(
  SELECT T3.startTm AS startTm, T3.endTm AS endTm, T3.others AS t3_others, T1.price AS price, T1.others AS t1_others
  FROM T1
  RIGHT JOIN
  (
    SELECT T2.startTm, T2.endTm, T2.others
    FROM T2
    WHERE T2.startTm >= 10 AND T2.endTm <= 20 AND T2.col1 = col1_value AND T2.col2 = col2_value
  ) AS T3
  ON T1.time >= T3.startTm AND T1.time <= T3.endTm
) AS T4
GROUP BY startTm, endTm;