id,请将其包含在结果中

nmpmafwu  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(592)

在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,如何将其包含在结果中?

vngu2lb8

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';

你也可以用 `subquery` 相反,因为你在寻找所有 `Detail_ID` 从 `job_details` table

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';

我怀疑,如果你有 `Job_ID` 作为数字类型,则不需要使用引号,只需使用值(即41230)
ma8fv8wu

ma8fv8wu2#

不要在句子中使用逗号 FROM 条款。始终使用适当的、明确的、标准的 JOIN 语法。
你只是想要一个 LEFT JOIN :

select details.Detail_ID, actions.Percent_Complete
from job_details details left join
     job_actions actions
     on details.Job_ID = actions.Job_ID and
        details.Detail_ID = actions.Detail_ID
where details.Job_ID = 41230;  -- I assume Job_ID is a number so the single quotes are not necessary

相关问题