mysql - GROUP BY 在 SUBQUERY WITH UNION ALL

标签 mysql subquery union-all

我有两个表,一个显示搜索查询历史记录,另一个显示位置。

第一个表用于搜索查询:searchTerm |日期 |用户名 |历史编号 第二个是位置:userId |日期 |历史编号 |纬度|液化天然气

我正在使用 UNION ALL 将这些组合到一个子查询中,并使用 JOIN LEFT 和 JOIN RIGHT 创建一个 FULL JOIN。

SELECT st, fa FROM
                 (SELECT webHistory.searchTerm AS st, locationHistory.fullAddress AS fa
                  FROM webHistory LEFT OUTER JOIN locationHistory
                  ON webHistory.historyId=locationHistory.historyId
                  UNION ALL
                  SELECT webHistory.searchTerm as st, locationHistory.fullAddress AS fa
                  FROM webHistory RIGHT OUTER JOIN locationHistory
                  ON webHistory.historyId=locationHistory.historyId) t

每件事情都运行得很好我得到的结果只是 webHistory 表中的条目,locationHistory 表也是如此。我遇到的问题是当我得到已添加到两者的行时。他们出现了两次!

我不能只使用 union,因为它会加入比我想要的更多的东西。如果添加了两个相同的搜索,它不会显示两个,而是将它们合并为一个。所以我需要使用 UNION ALL。

我必须使用联合,因为我从 LEFT 和 RIGHT 加入并且在 mySql 中不支持 FULL JOIN。

所以我假设我需要 GROUP BY historyId 因为这个 id 在同时添加的行上总是相同的(当通过查询和位置进行搜索时)。问题是,我已经尝试并测试过,但我似乎无法让它发挥作用。我错过了什么吗?

最后,当我问一个问题时,因为我还没有到测试的地步,所以 ORDER BY date 会在 OUTER 或 SUBQUERIES 上,因为我想显示最近的作为第一个结果?

/* 更多信息 */

我需要输出:

SearchTerm 如果没有完整地址。 如果没有 searchTerm,则为完整地址。 SearchTerm 和 fullAddress(如果两者都有)。

目前它输出前两个没问题,但后者会输出两次。

最佳答案

据了解,您希望消除具有相同 historyId 的重复项,因此只要 historyId 包含在 UNION 中,您就应该能够使用 UNION > 这样与另一个 historyId 的重复项就不会被删除;

SELECT st, fa FROM
 (SELECT webHistory.searchTerm AS st, 
         locationHistory.fullAddress AS fa, 
         webHistory.historyId
  FROM webHistory LEFT OUTER JOIN locationHistory
  ON webHistory.historyId=locationHistory.historyId
  UNION
  SELECT webHistory.searchTerm as st, 
         locationHistory.fullAddress AS fa,
         locationHistory.historyId
  FROM webHistory RIGHT OUTER JOIN locationHistory
  ON webHistory.historyId=locationHistory.historyId) t

关于mysql - GROUP BY 在 SUBQUERY WITH UNION ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293167/

相关文章:

php - 如何通过连接从 MySQL select 获取嵌套数组

php - 我的 URL 中需要连字符

mysql - 选择查询由两个依赖于外部查询的子选择排序

Mysql 查询 - 按年份分组的项目计数,包括 "sub-counts"

java - 如果找到匹配,则中止后续的 UNION ALL 命令 [H2]

mysql - 我如何找到今天的日期和从今天开始的 X 天之间的差异?

mysql - SQL在where子句中使用子选择中的列

sql - 获取聚合数据的 UNION ALL 的替代方案

sql - 字符串作为 PostgreSQL 列中的所有记录

使用带有 SSL 的 ODBC (5.1) 的 MySQL 连接