как получить mysql значений, основанных на условии левого соединения - PullRequest
0 голосов
/ 09 марта 2020

рабочий стол

1.id
2.status = 'active'
3.name

ремонтный стол

1.repair id
2.job_id
3.process = 'yes|no'
4.status  = '1|2'

рабочий стол

id   name  status
1    test  active
2    check active

ремонтный стол

repair_id     job_id  process  status
1                1      no        2
2                1      no        1
3                1      yes       2
4                2      no        1
5                2      no        2

здесь мне нужно чтобы показать данные, которые (process! = 'yes' и repair_status! = 2) группируют по job_id

мне нужен результат после запроса

---------------------------------------------
job_id    name( job.name ) status( job.status )
------------------------------------------------
2            check           active

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Чтобы получить указанные вами результаты, вы имеете в виду, что process - это не yes для любой строки для job_id. И тогда этот хотя бы один ряд имеет status <> 2. Это будет:

select j.job_id, j.name, j.status
from repair r join
     job j
     on r.job_id = r.id
group by j.job_id, j.name, j.status
having max(process) = 'no' and
       min(repair_status) = 1;
0 голосов
/ 09 марта 2020

Если вам нужны задания, для которых не существует ремонта с process = 'yes' и status = 2, вы можете использовать not exists:

select j.*
from jobs j
where not exists (
    select 1 
    from repair r 
    where r.job_id = j.id and r.process = 'yes' and r.status = 2
)
...