mysql - 合并 2 个 SELECT 语句并填充空白

标签 mysql join right-join

我有这个选择:

SELECT
    m.`maschine-name` AS 'byMaschine',
    q.`mname` AS 'byMName'
FROM
    `qualitaet` q
INNER JOIN
    maschinen m ON m.maschine = q.maschine
WHERE
    q.`status`='1'
GROUP BY
    concat(q.maschine, q.mname)

得到这个结果:

| maschine-name | mname |
|     TYP 1     |   0   |
|     TYP 2     |   3   |
|     TYP 2     |   4   |
|     TYP 3     |   0   |
|     TYP 4     |   0   |

参见 SQL Fiddle here

然后我有几乎相同的 SELECT 和额外的 COUNT 和 Datefilter:

SELECT
    m.`maschine-name` AS 'byMaschine',
    q.`mname` AS 'byMName',
COUNT(*) AS 'total'
FROM
    `qualitaet` q
INNER JOIN
    maschinen m ON m.maschine = q.maschine
WHERE
    q.`created`>=NOW() - INTERVAL 2 DAY
AND
    q.`status`='1'
GROUP BY
    concat(q.maschine, q.mname)

得到这个结果:

| maschine-name | mname | total |
|     TYP 2     |   3   |   1   |
|     TYP 3     |   0   |   2   |

参见 SQL Fiddle here

第二个 SELECT 没有给我所有信息。我需要两个 SELECTS 的混合

第二个 SELECT 应该看起来像这样的结果:

| maschine-name | mname | total |
|     TYP 1     |   0   |   0   |
|     TYP 2     |   3   |   1   |
|     TYP 2     |   4   |   0   |
|     TYP 3     |   0   |   2   |
|     TYP 4     |   0   |   0   |

是否可以使用 2 个 SELECTS 进行 RIGHT JOIN?或者有其他方法可以得到结果吗?

最佳答案

使用条件聚合:

SELECT m.`maschine-name` AS byMaschine, q.`mname` AS byMName,
       sum(q.created >= NOW() - INTERVAL 2 DAY) as Total
FROM qualitaet q INNER JOIN
     maschinen m
    ON m.maschine = q.maschine
WHERE q.status = '1'
GROUP BY q.maschine, q.mname;

其他建议:

  • 没有必要连接 GROUP BY 中的分组列——除非您真的、真的打算这样做(对此我表示怀疑)。
  • 如果 status 是数字,不要对常量使用单引号。
  • 不要对列别名使用单引号。事实上,您的别名根本不需要任何引号。

关于mysql - 合并 2 个 SELECT 语句并填充空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34547881/

相关文章:

php - 将行添加到 HTML 表并随后添加到数据库

mysql - IFclausole inside WHERE 匹配单个值或任意值

php - 如何将 PHP 对象转储到 SQL 表中?

MySQL:如何将列别名与特定的 JOIN 子句相关联

php - mysql查询从多个中选择,按日期排序

mysql - 当一个查询为空而其他查询有结果时进行检索的连接或其他方法

PHP/MYSQL - 仅显示表中的左连接项,但连接列中的右连接值

php - 将实时 Magento 2.1 站点迁移到本地主机时出错 : SQLSTATE[HY000] [1045] Access denied for user 'root' @'localhost'

mysql - 内连接,右连接?计数行

mysql - 如何在mysql中加入来自同一个表的两个选择