簡體   English   中英

MySQL INNER JOIN重復一列

[英]MySQL INNER JOIN duplicates one column

我有一個表user_log ,我在其中存儲有關用戶活動的信息,例如登錄和注銷操作。 表有四列: iduser_idactiontimestamp

我想在一個結果表中為某個user_id選擇所有注銷和登錄操作時間戳,會有這樣的列:

user_id login_timestamp logout_timestamp

我使用這個 MySQL 查詢:

SELECT 
    user_log.user_id,
    user_log_login.login_timestamp,
    user_log_logout.logout_timestamp
FROM
    user_log
INNER JOIN
    (SELECT 
        user_id, timestamp as login_timestamp
    FROM
        user_log
    WHERE
        action = 'login successful') as user_log_login
ON
    user_log.user_id = user_log_login.user_id
INNER JOIN
   (SELECT 
        user_id, timestamp as logout_timestamp
    FROM
        user_log
    WHERE
        action = 'logout successful') as user_log_logout
ON
    user_log.user_id = user_log_logout.user_id
WHERE
    user_log.user_id = 4

但結果包含login_timestamp 的重復 看一看: 在此處輸入圖片說明

我可以建議另一種方法,選擇中的相關查詢:

SELECT t.user_id,t.timestamp Login_Time ,
       (SELECT s.timestamp FROM user_log s
        WHERE s.user_id = t.user_id and s.action = 'logout successful'
            AND s.timestamp > t.timestamp
        ORDER BY s.timestamp limit 1) as Logout_Time
FROM user_log t
WHERE t.user_id = 4 
    AND t.action = 'login successful'

這將基本上為每次登錄選擇下一次注銷,並且比從表中選擇 3 次要快。

暫無
暫無

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

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