【问题标题】:Combining two MySQL queries from the same table合并来自同一个表的两个 MySQL 查询
【发布时间】:2013-11-22 05:35:32
【问题描述】:

我目前有一个这样设置的表:

issue|total   | series
-----|--------|---------
1    | 1      | Series A
2    | 2      | Series A
1    | 3      | Series B
3    | 4      | Series A
2    | 5      | Series B
1    | 6      | Series C

它跟踪系列(series),以及每个系列中的期号(issue)。除此之外,我还有此表中全部条目数的运行总数(总数)。

我想做的是结合两个查询,第一个用于定位给定系列中的最后一个问题编号,第二个用于始终定位表中的最后一个总数。大概我需要使用的两个查询如下,我只是不明白如何最好地将它们组合成一个选择查询:

要查找给定系列的最后一期:

SELECT issue FROM seriesTable WHERE series = 'Series A|Series B|Series C' ORDER BY issue DESC LIMIT 1

要查找条目总数:

SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1

那么,如果我想参考 A 系列的最后一期和条目总数(3、6),最好的方法是什么?我试过INNER JOINUNION 似乎都不起作用,但我认为我走在正确的轨道上,只是语法使用不正确。

我想另一种选择是单独运行查询,添加到数组并让 PHP 给我结果,但是如果可能的话我宁愿避免这种情况。

【问题讨论】:

  • 您希望输出的外观如何?

标签: mysql join union


【解决方案1】:

原答案如下,澄清后我有另一个答案

您只需要将单行结果集与您较胖的总数交叉连接。

对于A系列

SELECT series, MAX(issue), total.total FROM seriesTable
  JOIN (SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1) total
 WHERE series = 'Series A';

或每个系列

SELECT series, MAX(issue), total.total FROM seriesTable
  JOIN (SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1) total
 GROUP BY series;

sql fiddle

原答案

因此,要获得“截至该系列最后一期的每个系列的总数”,您需要自行加入并按系列分组以找到最大问题,然后在加入时使用它来提取总数。

select issue as current_issue, total, series from seriesTable
natural join (SELECT series, 
                     max(issue) as issue 
                FROM seriesTable 
               group by series) max_issues;

sql fiddle

【讨论】:

  • 当我运行这个查询时,我似乎得到了与该问题编号相关联的“总计”列中的数字。如果搜索 A 系列,我想得到(3,6),即最终 A 系列问题和条目总数。如果搜索 B 系列,我想要 (2,6),即 B 系列的最后一期加上条目总数。
  • 这非常有效。我承认,我不明白其中的逻辑,但它似乎正在做我需要做的事情。
【解决方案2】:

您只需要特定系列的最大期数,还需要表格的最大总数。

我想这就是你要找的东西:

SELECT max(issue), 
(SELECT max(total) 
    FROM seriesTable) 
    FROM seriesTable 
    WHERE series = 'Series A'

【讨论】:

  • 这非常简洁,但是当我运行此查询时,MAX(issue)COUNT(issue) 得到相同的结果 - 即在上面的示例中,对于 A 系列,我得到 (3,3)。我要做的是获取(3,6),即最后一个A系列编号和整个表中的条目总数。
  • 试试这个:select max(issue), (select max(total) from seriesTable) from seriesTable where series = 'Series A'
  • 从您的查询中得到了一些好主意。万分感谢。 +1。
猜你喜欢
  • 2016-11-10
  • 2012-02-18
  • 1970-01-01
  • 2020-10-12
  • 2020-01-10
  • 2018-09-21
  • 2011-06-02
  • 2015-01-31
  • 1970-01-01
相关资源
最近更新 更多