简体   繁体   English

MySQL JOIN查询在不同的数据库上给出不同的结果

[英]MySQL JOIN query giving different results on different databases

I'm running an query on my database locally installed on my machine and getting a result different to one when ran on my AWS RDS database. 我正在本地安装在计算机上的数据库上运行查询,并且在AWS RDS数据库上运行时得到的结果与查询结果不同。 I am running: 我在跑步:

SELECT SUM(Hours) AS 'TotalHours', Username, Name, Project_Name, Project_Ref, (37.5-SUM(Hours)) AS 'Missing'  
FROM bookings b 
JOIN projects p ON b.Project_ID=p.Project_ID 
RIGHT JOIN users u ON b.User_ID=u.User_ID   
WHERE  ((Date BETWEEN '2017-07-01' AND '2017-07-30') OR Date IS NULL) 
GROUP BY u.User_ID

When ran on local I get back every entry from the users table, even if they haven't made a booking on the bookings table. 当在本地运行时,即使用户未在预订表上进行预订,我也会从用户表中取回每个条目。

When ran on my server database I only get back users who have made a booking, not ever entry like expected when doing a right join. 当在我的服务器数据库上运行时,我只会找回已进行预订的用户,而不会像在进行正确加入时所期望的那样输入条目。

Try using LEFT JOIN instead of RIGHT JOIN , and put the Date criteria in the ON clause: 尝试使用LEFT JOIN代替RIGHT JOIN ,并将Date条件放在ON子句中:

SELECT SUM(Hours) AS 'TotalHours', Username, Name, Project_Name, Project_Ref, (37.5-SUM(Hours)) AS 'Missing'  
FROM users AS u
LEFT JOIN bookings AS b ON b.User_ID = u.User_ID AND b.DATE BETWEEN '2017-07-01' AND '2017-07-30'
LEFT JOIN projects AS p ON b.Project_ID=p.Project_ID

I suspect the problem is related to the INNER JOIN with projects in between the users and bookings table. 我怀疑问题与INNER JOIN有关,该projects位于usersbookings表之间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM