繁体   English   中英

如何为此编写mysql查询?

[英]How to write mysql query for this?

我想查询输出已完成工作的所有job_ID(JobDone) 在此处输入图片说明

我试图在查询上使用内部联接,但未能完成我想要的。

SELECT * FROM `jobs` WHERE Status='JobDone' GROUP BY Job_id

上面的查询还返回仅完成一项工作的值。

使用join query获取结果

select j1.Name,j2.Labor from jobcard j1 innerjoin jobs j2 on j1.job_ID=j2.job_ID where j2.Status='JobDone' GROUP BY j2.job_ID

我认为这是您要记住的查询:

SELECT j1.*, c.*
FROM jobs j1
INNER JOIN
(
    SELECT Job_ID
    FROM jobs
    GROUP BY Job_ID
    HAVING SUM(CASE WHEN Status <> 'JobDone' THEN 1 ELSE 0 END) = 0
) j2
    ON j1.Job_ID = j2.Job_ID
INNER JOIN Jobcard c
    ON t1.Job_ID = c.Job_ID

子查询聚合Job_id并断言每个状态Job_id完成。 此子查询产生一组ID,然后将这些ID用于确定从表中选择哪些完整记录。

我还包括了对Jobcard表的Jobcard尽管您可以随意删除它。

尝试这个

SELECT Job_ID FROM Jobs WHERE Status LIKE 'JobDone'
SELECT  a.Job_id,a.Labor,c.Name
FROM `jobs` a
   left join Jobcard c on a.Job_id=c.Job_id    
WHERE not exists (select b.Job_id
                  FROM jobs b
                  WHERE Status<>'JobDone' AND b.Job_id=a.Job_id) 

如果还需要Jobcard表中的名称,请使用以下查询:

SELECT * FROM JOBCARD JC
JOIN JOBS J ON JC.job_ID = J.job_ID
WHERE J.Status = 'jobDone'

如果您不想获取名称,也不需要联接表,请使用以下查询:

select * from jobs where Status='jobDone'

您应该通过: 与sql联接

反正这就是你的答案..

select job_ID from JobCard Inner join Jobs On JobCard.job_ID = Job.job_ID where status = 'jobDone' group by Job.labor

简单为:

Select jobcard.job_id, jobs.labor from jobcard 
inner join jobs on jobs.job_id = jobcard.job_id 
where jobs.status = 'JobDone';

请注意,您所写的内容:

SELECT * FROM `jobs` WHERE Status='JobDone' GROUP BY Job_id 

不显示已完成的作业的完整列表,因为您正在按job_id进行分组。 正确的说法是:

SELECT * FROM `jobs` WHERE Status='JobDone'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM