首页 > 解决方案 > Sql Join 查询 - 如果不在连接查询中,则设置默认值

问题描述

如果马在两个表中,我有一个 SQL 查询链接 2 个表以提供数据:

SELECT ProformSystem.TheDate as racedate, 
       ProformSystem.Course as course, 
       ProformSystem.TheTime as thetime, 
       ProformSystem.Horse as horse, 
       ATRSpeedRatings.rank as rank
    FROM ATRSpeedRatings 
    INNER JOIN ProformSystem ON (ATRSpeedRatings.Horse = trim(ProformSystem.Horse)) AND (ATRSpeedRatings.TheDate = ProformSystem.TheDate) order by ProformSystem.TheTime;"

是否有可能如果马ProformSystem.Horse不在,ATRSpeedRatings.Horse那么我只是将rank = 0其设为默认值,还是需要运行单独的查询?

这样我可以显示所有马匹,ProformSystem即使他们没有排名ATRSpeedRatings

标签: mysqlsqljoin

解决方案


我想你想要一个left joinand coalesce()

SELECT ps.TheDate as racedate, ps.Course as course, ps.TheTime as thetime,
       ps.Horse as horse, COALESCE(sr.rank, 0) as rank
FROM ProformSystem ps LEFT JOIN
     ATRSpeedRatings sr
     ON sr.Horse = TRIM(ps.Horse) AND sr.TheDate = ps.TheDate) 
ORDER BY ps.TheTime;

请注意,此查询使用表别名。这些使查询更易于编写和阅读。

此外,这种JOIN情况sr.Horse = trim(ps.Horse)非常可疑。您应该修复数据,使ProformSystem. 修复数据效率更高,并且可以防止未来查询出现问题。


推荐阅读