[英]How to write mysql query for this?
使用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.