使用 UNION 时 MySQL Count(*) 问题

标签 mysql

当存在多个 WHERE 子句时,我目前在 UNION 语句中使用 Count(*) 时遇到问题。

这是我正在尝试使用的 MySQL 语法:

    SELECT Count(*)
    FROM   (SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_languages
            UNION ALL
            SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_main
            UNION ALL
            SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_addons) AS a
    WHERE  taskstatus = 1
           AND year = 2014
           AND month = 04 

在此处寻求帮助之前我自己尝试过什么?

首先,我测试了使用任务状态获取计数是否像这样工作:

    SELECT Count(*)
    FROM   (SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_languages
            UNION ALL
            SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_main
            UNION ALL
            SELECT title,
                   taskstatus,
                   Extract(year FROM finished)  AS year,
                   Extract(month FROM finished) AS month
            FROM   todo_addons) AS a
    WHERE  taskstatus = 1 

上面的代码运行良好,并返回了当前计数 1。接下来,我进行了测试,以确保按月份和年份获取计数的效果如下:

SELECT Count(*)
FROM   (SELECT title,
               taskstatus,
               Extract(year FROM finished)  AS year,
               Extract(month FROM finished) AS month
        FROM   todo_languages
        UNION ALL
        SELECT title,
               taskstatus,
               Extract(year FROM finished)  AS year,
               Extract(month FROM finished) AS month
        FROM   todo_main
        UNION ALL
        SELECT title,
               taskstatus,
               Extract(year FROM finished)  AS year,
               Extract(month FROM finished) AS month
        FROM   todo_addons) AS a
WHERE  year = 2014
       AND month = 04 

这也有效并返回行计数 1,但第一个查询返回行计数 0,这导致我来到这里。有什么我没有看到的事情是我做错了吗?提前致谢。

最佳答案

你哪里困惑了?您可以有记录 WHERE taskstatus = 1 也可以有记录 WHERE Year = 2014 AND Month = 04 但没有记录 WHERE taskstatus = 1 AND Year = 2014并且月份 = 04

想象一下:

taskstatus     year       month
1              2000       05
2              2004       04 

关于使用 UNION 时 MySQL Count(*) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418832/

相关文章:

javascript - 如何重复执行nodejs mysql查询直到得到想要的结果?

mysql - 在 codeigniter 的助手中选择具有多个条件的记录

mysql - 在 MySQL IN() 语句中使用 varchar

mysql - SQL 内部连接 ​​3 个表

mysql - 有没有办法进一步优化这个 SELECT 查询?

mysql - 在 MySQL 查询中组合字段

php - 当我尝试从数组中获取值插入 MySQL 时收到错误消息

php - 使用 session 在网页中显示来自mysql数据库的数据

mysql - 检查值是否在数据库中存在两次以上

php - 如何使用 MySQL 将三个表与条件相交?