MySQL查询需求:将job_details中未在job_actions的Detail_ID纳入结果
解决MySQL中缺失Detail_ID的查询问题
嗨,这个问题本质上是要保留左表的所有记录,哪怕右表没有对应匹配项,用LEFT JOIN就能轻松搞定!
核心思路
你之前的查询应该是用了内连接(默认的JOIN),这种连接只会返回两张表中都存在匹配Detail_ID的记录,所以漏掉了那些在job_details里有但job_actions里没有的条目。而左连接(LEFT JOIN)会返回左表(这里是job_details)的所有行,右表(job_actions)没有匹配的话,对应的字段就会显示NULL。
基础解决方案
直接用LEFT JOIN关联两张表,同时过滤job_details的Job_ID:
SELECT jd.Detail_ID, ja.Percent_Complete FROM job_details jd LEFT JOIN job_actions ja ON jd.Detail_ID = ja.Detail_ID WHERE jd.Job_ID = '41230';
这样就能得到job_details中Job_ID='41230'的所有5条Detail_ID,缺失的Percent_Complete会显示为NULL。
优化:替换NULL为自定义值
如果不想看到NULL,可以用COALESCE函数把它替换成你需要的默认值(比如0):
SELECT jd.Detail_ID, COALESCE(ja.Percent_Complete, 0) AS Percent_Complete FROM job_details jd LEFT JOIN job_actions ja ON jd.Detail_ID = ja.Detail_ID WHERE jd.Job_ID = '41230';
为什么之前的查询不行?
当你直接查询job_actions时,相当于只从这张表取数据,自然拿不到不存在的Detail_ID。而左连接是以job_details为基准,确保所有符合条件的Detail_ID都被包含进来。
内容的提问来源于stack exchange,提问作者Chris Nielsen
相关产品推荐
相关产品推荐

