Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义MySql查询_Mysql - Fatal编程技术网

自定义MySql查询

自定义MySql查询,mysql,Mysql,很抱歉标题,我找不到问题的简短名称或描述 表A:每行是一个用户请求id,…,状态 表_B:表_A中的每个请求可以在表_B中有1行或多行作为请求id、请求id、…、状态的子部分 我的系统使用cron处理表_B中的行,同时运行多个cron。完成后,cron将表_B中的状态设置为3done 现在我需要知道每个requestTable_A的所有subsectionsTable_B行何时完成,以便更新表_A中的状态 我现在要做的是选择表A TOP 1中的第一个请求,然后获取表B中所有子部分的状态,并检查它

很抱歉标题,我找不到问题的简短名称或描述

表A:每行是一个用户请求id,…,状态

表_B:表_A中的每个请求可以在表_B中有1行或多行作为请求id、请求id、…、状态的子部分

我的系统使用cron处理表_B中的行,同时运行多个cron。完成后,cron将表_B中的状态设置为3done

现在我需要知道每个requestTable_A的所有subsectionsTable_B行何时完成,以便更新表_A中的状态

我现在要做的是选择表A TOP 1中的第一个请求,然后获取表B中所有子部分的状态,并检查它们是否都具有status==3,这是可行的,但我希望能够通过单个查询实现这一点,而无需检查代码中的值

大概是这样的:

select the request_id's 
  from Table_B where **all the rows** with this request_id has status=3
有什么想法吗?感谢您的帮助

试试这个:

SELECT request_id
FROM Table_B
GROUP BY request_id
HAVING COUNT(CASE WHEN status <> 3 THEN 1 END) = 0
这将选择仅与状态=3相关的请求id值

注意:我假设status是一个notnull字段。

试试这个:

SELECT request_id
FROM Table_B
GROUP BY request_id
HAVING COUNT(CASE WHEN status <> 3 THEN 1 END) = 0
这将选择仅与状态=3相关的请求id值

注意:我假设状态是一个非空字段。

如何

select
      a.id
   from
      Table_A a
   where 
      a.id NOT EXISTS( select b.request_id
                          from Table_B b
                          where a.id = b.request_id
                            AND b.staus <> 3 )
如果表_B根据请求_id编制索引,则为状态。不存在,直到它找到与查询匹配的任何记录,而不是子查询中匹配的每个记录为止,因此它应该在1条记录到下一条记录之间快速跳转。

如何

select
      a.id
   from
      Table_A a
   where 
      a.id NOT EXISTS( select b.request_id
                          from Table_B b
                          where a.id = b.request_id
                            AND b.staus <> 3 )

如果表_B根据请求_id编制索引,则为状态。不存在,直到它找到与查询匹配的任何记录,而不是子查询中匹配的每个记录为止,因此它应该在1条记录到下一条记录之间快速跳转。

tnx这似乎是可行的,使用这样的查询会对性能产生多大影响?考虑到一个行数超过100000的表,如果该表的索引正确,则应该执行OK。您可以使用实际数据进行测试,并告诉我们它的性能。或者,您可以尝试“不存在”并查看其比较结果。由于在我的小测试表中速度似乎快得多,所以在@DRapp编写的下面的“不存在”查询中花费了0.0005秒,在同一个表上的子查询花费了0.0476秒。但是我想我应该用一个更大的表来做另一个测试。@Exlord很好,继续你的测试,并在你对一个更大的数据集进行测试后返回我们。tnx这似乎是可行的,使用这样的查询会对性能产生多大的影响?考虑到一个行数超过100000的表,如果该表的索引正确,则应该执行OK。您可以使用实际数据进行测试,并告诉我们它的性能。或者,您可以尝试“不存在”并查看其比较结果。由于在我的小测试表中速度似乎快得多,所以在@DRapp编写的下面的“不存在”查询中花费了0.0005秒,在同一个表上的子查询花费了0.0476秒。但是我想我应该用一个更大的表来做另一个测试。@Exlord很好,继续你的测试,当你对一个更大的数据集进行了测试后再联系我们。tnx,这个有效,但它似乎快得多。tnx,这个有效,但它似乎快得多。