检查第二个表中是否存在数据

时间:2016-11-15 19:06:09

标签: mysql left-join outer-join

我有四个表TransactionMerchantonlineuseronlineuserhistory。 当用户进入onlinesite时,我们会在onlineuser表格中为entry_dateexpiry_date为该用户创建一行。然后每当他进入网站时,我们在onlineuserhistory表中创建一个条目,因此对于2016年11月1日至2016年11月15日的日期,他将在onlineuser表和5中有一条记录onlineuserhistory表中的记录,因为他可能已经访问了5次。 现在当月份到期时,如果他在2016年11月16日前往网站,onlineuser将更改日期,因为该商家和该用户只能存在一条记录。

出于报告目的,我需要检查onlineuserhistory表中是否存在至少一条记录。之前写过的人用左连接写到了onlieuser表。

SELECT COUNT(*) AS TotalNumPurchases
FROM Transactions t
INNER JOIN Merchants m ON m.MerchantID = t.FromEntityID AND  
m.StatusID = 8 AND m.IsHidden = 0
INNER JOIN MerchantLocations ml ON m.MerchantID = ml.MerchantID
INNER JOIN Accounts AS a on t.ToEntityID = a.AccountID
LEFT JOIN onlineuser au ON m.MerchantID = au.MerchantID and 
a.ManagerUserID = au.UserID
a.ManagerUserID = au.UserID  
WHERE t.ToEntityTypeID = 5
AND t.TransactionDate BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59'

我如何更新这个以便我可以检查onlineuserhistory表以检查该日期范围内是否存在至少一条记录,如果存在多条记录,那么我也应该考虑1条记录为此。

1 个答案:

答案 0 :(得分:0)

您可以添加一个子查询,以返回在此期间是否有人在线。

SELECT COUNT(*) AS TotalNumPurchases,
        (SELECT COUNT(*) > 0
         FROM onlineuserhistory
         WHERE date BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59') AS anyOnline
FROM Transactions t
INNER JOIN Merchants m ON m.MerchantID = t.FromEntityID AND  
m.StatusID = 8 AND m.IsHidden = 0
INNER JOIN MerchantLocations ml ON m.MerchantID = ml.MerchantID
INNER JOIN Accounts AS a on t.ToEntityID = a.AccountID
LEFT JOIN onlineuser au ON m.MerchantID = au.MerchantID and 
    a.ManagerUserID = au.UserID
WHERE t.ToEntityTypeID = 5
AND t.TransactionDate BETWEEN '2016-11-11 07:00:00' AND '2016-11-15 06:59:59'