mysql - 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
。
解决方案
我想你想要一个left join
and 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
. 修复数据效率更高,并且可以防止未来查询出现问题。
推荐阅读
- html - 如何将 css box-shadow 属性设置为重叠图像?
- typescript - 如何从字符串或字符串数组属性推断类型
- reactjs - 是否有适用于 gatsby-image 的良好反应轮播组件?
- c# - 如何从 .dyn 文件中获取底层代码
- python - 在 Python 中将一个数组与自身网格化 n 次
- python - 如何以有效的方式迭代字典的值?
- python - 从匹配索引的字符串中计算单词的实例
- javascript - 有哪些易于使用的资源和/或技术来追踪 Web javascript 错误?
- php - 无法在 SQLite3 模块中加载扩展,PHP
- c - 用 popen 创建的 C 进程不打印它的输出