SELECT alrt.alertid,
alrt.alertTitle,
alrt.alertDetails,
alrt.alertDate,
alrt.alertURL,
sub.subTitle,
avg(dtl.avgVote)
FROM alertDetails dtl,
ALERTMASTER alrt,
SUBSCRIPTIONMASTER sub
WHERE alrt.subId = 1
AND alrt.subId = sub.subId
GROUP BY alertId
ORDER BY alertDate DESC
limit 0,10;
alertMaster中有许多记录,其中有很多b在alertDetails中投票。 当我执行上述查询时,我得到 -0.2500 这些记录。有没有办法在那里得到0这样的记录?
答案 0 :(得分:1)
您需要的是从AlertMaster到AlertDetails的左连接。但是,您的原始查询不包括AlertDetails与其他两个表相关的任何条件,也不知道从哪个表中找到大多数列,因为它们不包含表别名。此外,您应该不习惯使用逗号分隔语法,而应使用ISO Join语法。
最后,您尝试在AlertDate上订购,但它不包含在Group By子句中。这是MySQL的一个“功能”,应该放弃IMO。 SQL规范要求Select子句中的所有列都存在于Group By子句中,或者列包含在聚合函数中。因此,要么在alertDate上组,要么将其包装在聚合函数中。
Select A.alertid
, Min( A.alertTitle ) As alertTitle
, Min( A.alertDetails ) As alertDetails
, Min( A.alertDate ) As alertDate
, Min( A.alertURL ) As alertUrl
, Min( S.subTitle ) As subTitle
, Coalesce( Avg( D.avgVote ), 0 ) As avgVote
From AlertMaster As A
Join SubscriptionMaster As S
On S.subid = A.subId
Left Join AlertDetails As D
On D.alertId = A.alertId
Where A.subId=1
Group By A.alertId
Order By alertDate DESC
Limit 0,10;