在mysql数据库中,我有两个表叫做job\u details和job\u actions。在job\u details表中,如果我得到job\u id 41230的detail\u id,那么我会得到五个结果。例如:
select Detail_ID from job_details where Job_ID = '41230';
我要做的是使用相同的job\u id从job\u actions表中获取每个细节id的完成百分比。例如,这只产生4条记录,因为不是所有的详细信息ID都显示在此表中:
select Detail_ID, Percent_Complete from job_actions where Job_ID = '41230';
当我尝试连接两个表时,得到相同的四条记录:
select
details.Detail_ID,
actions.Percent_Complete
from
job_details details,
job_actions actions
where
details.Job_ID = '41230' and
details.Job_ID = actions.Job_ID and
details.Detail_ID = actions.Detail_ID;
我希望我的输出包括在job\u details表中找到的每个details\u id,即使在job\u actions表中找不到它。例如:
我知道如何找到job\u actions表中缺少的detail\u id,但不知道如何将其包含在结果中。例如:
select details.Detail_ID from job_details details
left join job_actions actions using (Detail_ID)
where actions.Detail_ID IS NULL and details.Job_ID = '41230';
即使作业操作表中缺少详细信息\u id 87679,如何将其包含在结果中?
2条答案
按热度按时间vngu2lb81#
从那时起,您就编写了
joins
但对于旧样式,where子句可能会变成实际的内部连接或相等连接。所以,使用适当的显式
join
类型为的语法left join
```select jd.Detail_ID, ja.Percent_Complete
from job_details jd left join job_actions ja on
ja.Job_ID = jd.Job_ID and
ja.Detail_ID = jd.Detail_ID
where jd.Job_ID = '41230';
select Detail_ID,
(select Percent_Complete from job_actions
where Job_ID = jd.Job_ID and
Detail_ID = jd.Detail_ID) as Percent_Complete -- Use limit with order by clause in case one or more Percent found.
from job_details jd
where Job_ID = '41230';
ma8fv8wu2#
不要在句子中使用逗号
FROM
条款。始终使用适当的、明确的、标准的JOIN
语法。你只是想要一个
LEFT JOIN
: