首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -计算主表中具有某些条件且等于特定值的行

MySQL -计算主表中具有某些条件且等于特定值的行
EN

Stack Overflow用户
提问于 2014-09-21 16:08:54
回答 2查看 1.6K关注 0票数 0

我有两个桌子,第一个名叫table1

代码语言:javascript
复制
ID  |  Name    |  Type | isActive | isDeleted | 
-----------------------------------------------
1   |  item 1  |  4    |  1       |  0        |
2   |  item 2  |  2    |  1       |  0        |
3   |  item 3  |  1    |  1       |  1        |
4   |  item 4  |  1    |  1       |  0        |
5   |  item 5  |  1    |  1       |  0        |
6   |  item 6  |  3    |  1       |  0        |
7   |  item 7  |  1    |  1       |  0        |
8   |  item 8  |  2    |  1       |  0        |
9   |  item 9  |  1    |  1       |  0        |
10  |  item 10 |  1    |  1       |  0        |

第二个名为table1_meta

代码语言:javascript
复制
ID  |  table1_id  | options    | value
------------------------------------
1   |  1          | dont_ask   |  1   
2   |  2          | dont_ask   |  1
3   |  5          | dont_ask   |  1
4   |  6          | dont_ask   |  1
5   |  8          | alwasys_ask|  1
6   |  9          | alwasys_ask|  1
7   |  1          | is_flagged |  1
8   |  2          | is_flagged |  0
9   |  3          | is_flagged |  0
10  |  4          | is_flagged |  0
11  |  5          | is_flagged |  0
12  |  6          | is_flagged |  1
13  |  7          | is_flagged |  0
14  |  8          | is_flagged |  0
15  |  9          | is_flagged |  0
16  |  10         | is_flagged |  0

我试图在满足某些特定条件的table1中计算行,其中一些条件。

WHERE条件必须包含以下条件:

代码语言:javascript
复制
table1.type = 1 and table1.isActive = 1 and table1.isDeleted = 0 and table1_meta.options = 'is_flagged' and table1_meta.value = 0

这是:

代码语言:javascript
复制
table1_meta.options = 'dont_ask' and table1_meta.value = 1

这是:

代码语言:javascript
复制
table1_meta.options = 'always_ask' and table1_meta.value = 1

那我该怎么做呢?

SQLFiddle链接:http://sqlfiddle.com/#!2/2eb27b

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 22:04:06

我想我找到了问题的答案。

查询是:

代码语言:javascript
复制
SELECT Count(*) AS total FROM
        (SELECT Count(*)
        FROM   table1 t1,
               table1_meta t1meta
        WHERE  t1.type = 1
               AND t1.isactive = 1
               AND t1.isdeleted = 0
               AND t1meta.options = 'is_flagged'
               AND t1meta.value = 0
               AND t1.id NOT IN (SELECT table1_id
                                 FROM   table1_meta tm
                                 WHERE  tm.options = 'dont_ask'
                                        AND tm.value = 1)
        UNION
        SELECT Count(*)
        FROM   table1_meta tm,
               table1 t1
        WHERE  t1.id = tm.table1_id
               AND tm.options = 'always_ask'
               AND tm.value = 1) x

不管怎样,谢谢,戈登。

票数 0
EN

Stack Overflow用户

发布于 2014-09-21 16:13:05

我假设您正在尝试计算第一个表中的行数。下面是一种使用子查询的方法:

代码语言:javascript
复制
select count(*)
from table1 t1
where t1.type = 1 and t1.isActive = 1 and t1.IsDeleted = 0 and
      exists (select 1
              from table1_meta tm
              where t1.id = tm.table1_id and tm.options = 'is_flagged' and tm.value = 0
             ) and
      not exists (select 1
                  from table1_meta tm
                  where t1.id = tm.table1_id and
                        tm.options = 'dont_ask' and tm.value = 1
                 ) and
      exists (select 1
              from table1_meta tm
              where t1.id = tm.table1_id and
                    tm.options = 'always_ask' and tm.value = 1
             );

这对于元表上的每个条件都有一个单独的子查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25961140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档