mysql - 组合多个 View 中的多个 SELECT 查询来统计数据

标签 mysql

因此,我正在尝试根据我已经编写的几个 MySQL View 构建一份相当于报告的内容。每个 View 都有三列,看起来像这样

View ABC:
-------------------------------
|    A    |    B    |    C    |
|         |         |         |
-------------------------------
|  data1  |   asdf  |    3    |
|  data1  |   jkl;  |    1    |
-------------------------------

假设还有其他三个结构相同的 View ,名为 DEF、GHI 和 JKL。在 View DEF 中,最后一列名为 D,在 GHI 中最后一列名为 E,在 JKL 中最后一列名为 F。

在每个 View 中,A 列中的值对于所有行都应该相同(这是解决我遇到的问题的另一种方法,它不完全依赖 MySQL,但我确信有一定是更好的方法)。

我想做的是:

View ABC:
-------------------------------------------------------------
|    A    |    B    |    C    |    D    |    E    |    F    |
|         |         |         |         |         |         |
-------------------------------------------------------------
|  data1  |   asdf  |    3    |    0    |    2    |    7    |
|  data1  |   jkl;  |    1    |    1    |    0    |    0    |
|  data2  |   lmno  |    0    |    1    |    2    |    17   |
-------------------------------------------------------------

所以我的第一个想法是在 B 字段上进行 LEFT OUTER JOIN,如下所示:

SELECT ABC.*, DEF.D, GHI.E, JKL.F 
FROM ABC 
LEFT OUTER JOIN DEF ON ABC.B = DEF.B 
LEFT OUTER JOIN GHI ON ABC.B = GHI.B
LEFT OUTER JOIN JKL ON ABC.B = JKL.B

这一切都很好;它用 NULL 填充零,我可以轻松地将其合并为 0。但是,问题是 DEF、GHI 或 JKL View 之一中是否有一行用户名与 ABC 中的用户名不匹配;该行只是从我的 SELECT 中省略(因为这是一个 LEFT OUTER JOIN)。 RIGHT OUTER JOIN 也遇到同样的问题。

有没有办法执行完全外连接,使得四个 View 中任何一个中出现的任何 B 都将在我的 SELECT 中拥有一行?我尝试嵌入一些其他选择,但不幸的是,这似乎在 SELECT 结果中以 Not Acceptable 方式重复行和数据值。从查看文档来看,我认为 MySQL 不支持完整的外连接(至少我找不到),即使支持,我也不知道如何将用户名从其他 View 获取到SELECT 语句中的用户名列。

最佳答案

您正在寻找的内容称为 FULL OUTER JOIN 。不幸的是,MySQL 似乎不直接支持它,但是您可以通过对 LEFT JOINRIGHT JOIN 执行 UNION 来实现结果>s.

来自:http://dev.mysql.com/doc/refman/5.0/en/join.html

Posted by barbarina on September 12 2006 2:17pm

You can emulate FULL OUTER JOIN using UNION (from MySQL 4.0.0 on):

with two tables t1, t2:

SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id 
UNION 
SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id

with three tables t1, t2, t3:

SELECT * 
FROM 
  t1 
  LEFT JOIN t2 ON t1.id = t2.id 
  LEFT JOIN t3 ON t2.id = t3.id 
UNION 
SELECT * 
FROM t1 
  RIGHT JOIN t2 ON t1.id = t2.id 
  LEFT JOIN t3 ON t2.id = t3.id 
UNION 
SELECT * 
FROM 
  t1 
  RIGHT JOIN t2 ON t1.id = t2.id 
  RIGHT JOIN t3 ON t2.id = t3.id

关于mysql - 组合多个 View 中的多个 SELECT 查询来统计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480793/

相关文章:

php - 使用 CakePHP 从 MySQL 存储过程检索输出变量

python - Python 到 MYSQL 插入中遇到的问题

mysql - 如何避免在此代码中在数据库中存储重复项?

c# - SQL 仅在 RELEASE 模式下出错

mysql - GROUP BY字段的顺序影响MySQL查询结果

mysql - 在 osx 上安装两个 mysql?

mysql - 如何在已准备好具有多个联接的数据库上执行之间查询?

MySQL查询从多行获取数据

php - 在进行 MySQL 查询之前删除一些数组元素

PHP 对象属性中有方括号