Mysql 如何将这些SQL SELECT查询组合到一个SELECT语句中
如何将这两个select语句组合到一个查询中:Mysql 如何将这些SQL SELECT查询组合到一个SELECT语句中,mysql,syntax,select,union,Mysql,Syntax,Select,Union,如何将这两个select语句组合到一个查询中: SELECT SUM( incidents ) AS fires, neighborhoods AS fire_neighborhoods FROM ( SELECT * FROM `fires_2009_incident_location` UNION ALL SELECT * FROM `fires_2008_incident_location` UNION ALL SELECT * FROM `fires_2007_incident
SELECT SUM( incidents ) AS fires, neighborhoods AS fire_neighborhoods
FROM (
SELECT *
FROM `fires_2009_incident_location`
UNION ALL SELECT *
FROM `fires_2008_incident_location`
UNION ALL SELECT *
FROM `fires_2007_incident_location`
UNION ALL SELECT *
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC
SELECT SUM( incidents ) AS adw, neighborhoods AS adw_neighborhoods
FROM (
SELECT *
FROM `adw_2009_incident_location`
UNION ALL SELECT *
FROM `adw_2008_incident_location`
UNION ALL SELECT *
FROM `adw_2007_incident_location`
UNION ALL SELECT *
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC
因此,我希望返回查询,类似于:
fire_neighborhoods fires adw_neighborhoods adw
xyzNeighborhood 6 abcNeighborhood 22
jklNeighborhood 3 tuvNeighborhood 40
我只想简单地结合上面两个查询的结果。这两个查询彼此独立。一个查询的结果不会影响另一个查询的结果。我只需要一种方法将两个结果合并为一个
如果有人有任何建议,请告诉我
多谢各位
-Laxmidi如果我正确理解您的需求,您可以将查询合并在一起,添加一列,让您知道它来自哪个查询:
SELECT SUM( incidents ) AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'Fires' as which_query
FROM (
SELECT *
FROM `fires_2009_incident_location`
UNION ALL SELECT *
FROM `fires_2008_incident_location`
UNION ALL SELECT *
FROM `fires_2007_incident_location`
UNION ALL SELECT *
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC
UNION
SELECT SUM( incidents ) AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'ADW' as which_query
FROM (
SELECT *
FROM `adw_2009_incident_location`
UNION ALL SELECT *
FROM `adw_2008_incident_location`
UNION ALL SELECT *
FROM `adw_2007_incident_location`
UNION ALL SELECT *
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC
假设您的行数是原来的两倍,并且一半的数据将为空,但是像您的示例中那样将结果“砰砰”地放在一起是不常见的。您给出的示例表明您希望水平组合查询,但后来您声明它们是完全独立的。这些语句相互冲突,因为当记录彼此相关时,通常会水平组合数据。下面是我横向组合它们的想法,但我也记下了我纵向组合它们的想法 这取决于你想如何把它们联系起来。如果您是基于邻居进行查询,则可以在fire_Neighbories=adw_Neighbories上的两个较大查询之间进行连接,例如:
SELECT fire_neighborhoods, fires, adw
FROM (
SELECT SUM( incidents ) AS fires, neighborhoods AS fire_neighborhoods
FROM (
SELECT *
FROM `fires_2009_incident_location`
UNION ALL SELECT *
FROM `fires_2008_incident_location`
UNION ALL SELECT *
FROM `fires_2007_incident_location`
UNION ALL SELECT *
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC
) AS fires
INNER JOIN (
SELECT SUM( incidents ) AS adw, neighborhoods AS adw_neighborhoods
FROM (
SELECT *
FROM `adw_2009_incident_location`
UNION ALL SELECT *
FROM `adw_2008_incident_location`
UNION ALL SELECT *
FROM `adw_2007_incident_location`
UNION ALL SELECT *
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC
) AS adw
ON fires.fire_neighborhoods = adw.adw_neighborhoods
这只是一个例子。您可能需要一个不同的连接或其他东西来让它为您工作
现在,您声明这两个查询是独立的,并且不会相互影响。如果它们确实没有共同点,您应该在每个查询中添加一列,指明它来自哪个查询(例如,对于fire查询,添加一个常量值为1的列;对于adw查询,添加一个常量值为2的列)。然后,将两个大型查询合并在一起。这将以垂直方式而不是水平方式将它们组合起来。其他人给出的关于使用鉴别器列的答案与您的要求类似,但为了以防万一,可以将虚拟占位符列添加到联合中,如下所示:
SELECT
SUM( incidents ) AS fires,
neighborhoods AS fire_neighborhoods,
0 as adw,
'' as adw_neighbourhoods
FROM (
SELECT *
FROM `fires_2009_incident_location`
UNION ALL SELECT *
FROM `fires_2008_incident_location`
UNION ALL SELECT *
FROM `fires_2007_incident_location`
UNION ALL SELECT *
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC
UNION
SELECT
0 as fires,
'' as fire_neighbourhoods,
SUM( incidents ) AS adw,
neighborhoods AS adw_neighborhoods
FROM (
SELECT *
FROM `adw_2009_incident_location`
UNION ALL SELECT *
FROM `adw_2008_incident_location`
UNION ALL SELECT *
FROM `adw_2007_incident_location`
UNION ALL SELECT *
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC
并排显示两个不相关的查询通常是报表软件的工作,而不是SQL引擎的工作。这里的问题是,您要求查询工具执行它不适合执行的操作:显示格式 关系(从根本上说,选择的结果应该是什么)是一种对世界状态做出断言的数据结构。每行定义一系列(理想情况下)为真的命题
在您的问题中,这些行包含任意的事实陈述,这些事实彼此之间没有关联,也无法陈述任何命题。感谢您帮助我们解决这个问题。向David Hall、Aaron、Jeffrey Whitledge&NYSystems分析师大声呼喊。我选择了虚拟列选项:
SELECT SUM( incidents ) , neighborhoods, 'adw' as offense
FROM (
SELECT *
FROM `adw_2009_incident_location`
UNION ALL SELECT *
FROM `adw_2008_incident_location`
UNION ALL SELECT *
FROM `adw_2007_incident_location`
UNION ALL SELECT *
FROM `adw_2006_incident_location`
) AS combo
GROUP BY neighborhoods
UNION ALL
SELECT SUM( incidents ), neighborhoods, 'fire' as offense
FROM (
SELECT *
FROM `fire_2009_incident_location`
UNION ALL SELECT *
FROM `fire_2008_incident_location`
UNION ALL SELECT *
FROM `fire_2007_incident_location`
UNION ALL SELECT *
FROM `fire_2006_incident_location`
) AS combo2
GROUP BY neighborhoods
我一定错过了什么。为什么不能将这两个查询合并在一起?可以发布表的结构吗?为什么人们投票支持这个问题?这个问题真的有用吗?这对我来说似乎相当学术和多余。@Jim G:责怪选民徽章:为什么模式每年映射一个表?这些是视图吗?嗨,Aaron,我想我不需要水平返回数据。我可以添加一个列,指示是火灾还是adw,然后让其他列显示邻居和事件-Laxmidhi Aaron,我忘了在上一封邮件中说“谢谢”。对不起-杰弗里,你说得对。水平返回数据是没有意义的。谢谢-嗨,大卫,谢谢你的留言。我试过你的建议,但不幸的是,我没能把它付诸实施。可以在mySQL中添加虚拟列吗-Laxmidi@Laxmidi-运行该语法时是否看到错误?我不确定mySQL,尽管我希望它能工作。Tour问题被某人重新标记为tsql,这是microsoft sql实现,我现在将重新标记它。您好,NYSystemsAnalyst,感谢您建议添加带有常量的列。我最终可能会那样做-拉西米地