簡體   English   中英

將MySQL查詢從嵌套選擇轉換為內部聯接

[英]Convert MySQL query from a nested select to an inner join

我有一個嵌套的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;

在此先感謝您的幫助!

對子選擇使用聯接的可能解決方案。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM