簡體   English   中英

MySQL 多次左外連接同一個表?

[英]MySQL left outer join the same table multiple times?

所以我有一個MySQL困境,它似乎相對簡單,但事實並非如此。

我有兩個表:一個包含要顯示的唯一 ID 列表,另一個表列出時間戳旁邊的 ID。

======   ============================
| ID |   | ID |      Timestamp      |
======   ============================
| 1  |   | 1  | 2015-10-10 00:00:00 |
| 2  |   | 1  | 2015-10-10 00:10:00 |
| .. |   | 2  | 2015-10-10 00:00:00 |
======   ============================

我需要顯示一個布爾值,如果相關的ID兩個Date時報最后日期是積極的所有的時間之間表B中的記錄。


視覺圖


我嘗試過類似的事情:

SELECT 
    a.`ID`, 
    MAX(b1.`Timestamp`) IS NOT NULL as 'Active',
    MAX(b2.`Timestamp`) AS 'LastActive'
FROM `Table-A` a
LEFT OUTER JOIN `Table-B` b1
    ON a.ID = b1.ID
    AND b1.`Timestamp` BETWEEN @startTime AND @endTime
LEFT OUTER JOIN `Table-B` b2
    ON a.ID = b2.ID
GROUP BY a.ID
;

目前不確定原因:但查詢似乎無限運行並且沒有得到任何結果。 任何人都可以建議正確的方法來獲得我的查詢所需的結果嗎?


編輯:

這是上述查詢的EXPLAIN SELECT

解釋選擇

用這個

SELECT 
    a.*, 
    IF(b1.cnt IS NULL, FALSE, TRUE) AS is_found, 
    IFNULL(b2.dt, '-') AS max_dt 
FROM table1 a 
    LEFT OUTER JOIN (
        SELECT 
            id, 
            COUNT(*) AS cnt 
        FROM table2 
        WHERE 
            `timestamp` BETWEEN '2015-01-01' AND '2015-12-31' 
        GROUP BY 1) b1 
    ON a.id=b1.id 
    LEFT OUTER JOIN (
        SELECT id, 
            MAX(TIMESTAMP) AS dt 
        FROM table2 
        GROUP BY 1) b2 
    ON a.id=b2.id

暫無
暫無

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

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