时间戳转换器

将 MySQL 查询从嵌套选择转换为内部连接

日期:2023-02-24     浏览:151    
【中文标题】将 MySQL 查询从嵌套选择转换为内部连接【英文标题】:Convert MySQL query from a nested select to an inner join 【发布时间】:2013-10-08 08:47:58 【问题描述】:

我有一个嵌套的 select 语句可以正常工作,唯一的问题是运行时间太长。我将我的其他查询之一转换为内部联接,它要快得多。我正在尝试将此查询转换为内部联接。

当前工作查询:

select date(datetime), req_origin,  count( distinct session_id)
from LOG L1
where((datetime >= str_to_date('2013-01-01 00:00:00','%Y-%m-%d %H:%i:%s'))  
and (datetime < str_to_date('2013-01-05 00:00:00','%Y-%m-%d %H:%i:%s'))
and code_subcode in ('1001111','1001112','1001113','1001114'))
and ((
select count(*) from LOG L2 where  L2.session_id = L1.session_id and date(L2.datetime)
= date(L1.datetime)
and code_subcode in ('1001111','1001112','1001113','1001114')
) = 4)
group by date(datetime),req_origin order by date(datetime),req_origin;

这就是我为内部连接而获得的,但它不能正常工作。它仅在检查 1 个匹配代码时返回数据。当我查询 4 ​​个匹配代码时,查询不返回任何内容。

select date(l1.datetime), l1.req_origin, count(distinct l1.session_id)
from LOG l1
INNER JOIN LOG l2 on l2.SESSION_ID = l1.SESSION_ID
where((l1.datetime >= str_to_date('2013-01-01 00:00:00','%Y-%m-%d %H:%i:%s'))  
and (l1.datetime < str_to_date('2013-01-05 00:00:00','%Y-%m-%d %H:%i:%s'))
and l1.code_subcode in ('1001111','1001112','1001113','1001114')
and l2.code_subcode in ('1001111','1001112','1001113','1001114') = 4)
group by date(l1.datetime), l1.req_origin order by date(l1.datetime), l1.req_origin;

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

对子选择使用连接的可能解决方案。

SELECT DATE(datetime), req_origin,  COUNT( DISTINCT session_id)
FROM LOG L1
INNER JOIN 
(
    SELECT session_id, DATE(datetime) AS DateTime, COUNT(*) AS ItemCount
    FROM LOG  
    WHERE code_subcode IN ('1001111','1001112','1001113','1001114')
    GROUP BY session_id, DATE(datetime)
) L2
ON L1.session_id = L2.session_id
AND DATE(L1.datetime) = L2.DateTime
AND ItemCount = 4
WHERE((L1.datetime >= str_to_date('2013-01-01 00:00:00','%Y-%m-%d %H:%i:%s'))  
AND (L1.datetime < str_to_date('2013-01-05 00:00:00','%Y-%m-%d %H:%i:%s'))
AND code_subcode IN ('1001111','1001112','1001113','1001114'))
GROUP BY DATE(L1.datetime), req_origin 
ORDER BY DATE(L1.datetime), req_origin;

【讨论】:

@kickstar 是 log L1,log L2 是 diff table ?? 他们都是同一张桌子。给定主要事件的别名 L1,而 L2 是给子查询的别名,该子查询正在获取每个会话 ID/日期的项目计数。

相关文章

将嵌套查询转换为 sql 视图

{】将嵌套查询转换为sql视图【英文标题】:ConvertNestedqueriesintosqlview【发布时间】:2014-03-2705:31:08【问题描述】:我有这三个不同的查询。这些查询给我独立正确的结果。现在我想将这三个查询合并到一个查询或视图中,以便从...}

使用 Arel 进行嵌套集和连接查询并转换为 ActiveRecord::Relation

{】使用Arel进行嵌套集和连接查询并转换为ActiveRecord::Relation【英文标题】:UseArelforanestedset&joinqueryandconverttoActiveRecord::Relation【发布时间】:2011-05-2821:20:16【问题描述】:我有一个组织模型(嵌套集)。我有一个人的模型。一...}

将mysql表数据转换为JSON嵌套格式

{】将mysql表数据转换为JSON嵌套格式【英文标题】:ConvertmysqltabledatatoJSONnestedformat【发布时间】:2021-12-1721:53:12【问题描述】:我正在从MySQL表中获取以下格式的数据:sNamesIdpIdsNumberqtypricetest31123451010test31123457509test311234515008test311234...}

如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?

{...换。那些嵌套的OUTER连接对我来说是第一次。原始Informix查询:fromttdpur401105tdpur401,ttdpur400105tdpur400--Problemi}

MySQL 嵌套连接排序

{...将它用作基本连接,但是当我添加了几十万测试用户时,查询会随着分页而变得越来越长,并且在您到达最后一页时会花费绝对时间。然后我嵌套连接以解决速度问题,但由于外部查询仅返回具有偏移量和限制的活动用户,然后...}

使用 laravel 查询生成器嵌套选择?

{】使用laravel查询生成器嵌套选择?【英文标题】:Nestedselectusinglaravelquerybuilder?【发布时间】:2021-01-0108:21:51【问题描述】:我正在尝试找到一种方法将其转换为laravel中的查询构建器,但我仍然无法做到!SELECT*FROM(SELECTthanhvientro...}

使用 JavaScript 将嵌套对象/关联数组转换为查询字符串

{】使用JavaScript将嵌套对象/关联数组转换为查询字符串【英文标题】:Convertanestedobject/associativearrayintoaquerystringusingJavaScript【发布时间】:2017-06-2520:38:07【问题描述】:我想使用JavaScript将对象转换为查询字符串。比如我要转换:a...}

这个查询不好吗? MySql 一对多与左连接和嵌套查询

{】这个查询不好吗?MySql一对多与左连接和嵌套查询【英文标题】:Isn\'tthisqueryok?MySqlonetomanywithleftjoinandnestedquery【发布时间】:2021-01-1408:22:56【问题描述】:花了一段时间找到最佳的为什么做这项工作后,我以这个查询结束,我...}

PHP在连接键时将嵌套数组转换为单个数组?

{】PHP在连接键时将嵌套数组转换为单个数组?【英文标题】:PHPconvertnestedarraytosinglearraywhileconcatenatingkeys?【发布时间】:2010-12-2508:52:47【问题描述】:这是一个示例数组:$foo=array(\'employer\'=>array(\'name\'=>\'FoobarInc\',\'phone\'=>...}

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

{...Avro对其进行序列化,将它们上传到S3,然后使用Athena进行查询。我}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号