Выберите, где объединить таблицу содержит конкретные значения - PullRequest
0 голосов
/ 07 мая 2018

Давайте представим, что у меня есть следующие таблицы:

Table: Jobs
JobID | Desc
1  |  Desc1
2  |  Desc2
3  |  Desc3

Table: Docs
JobId | DocId | Filename
1     | 1     | File1
1     | 2     | File2 
2     | 3     | File1
3     | 4     | File2

Теперь я хочу выбрать задания из таблицы Jobs с ее desc, которые имеют File1 и File2 в таблице документов, которая находится здесь JobId=1. Как должен выглядеть мой оператор SQL?

ОБНОВЛЕНИЕ:

Я пробовал следующее:

Select * 
from Jobs j 
inner join Docs d 
   on j.JobId = d.jobId 
where Filename = 'File1' and Filename='File2'

что не так. Он ничего не возвращает, потому что в Docs нет записи, в которой есть File1 и File2 в поле.

Select * 
from Jobs j 
inner join Docs d 
   on j.JobId = d.jobId 
where Filename = 'File1' or Filename='File2'

что не так. Возвращает задания 1, 2, 3, поскольку они удовлетворяют этому критерию.

Что мне нужно:

Из таблицы Jobs:

1  |  Desc1

, потому что у него есть запись в таблице Docs, содержащая File1, а другая содержит File2.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018
Select j.JobID , j.Desc
from Jobs j 
inner join Docs d 
   on j.JobId = d.jobId 
where Filename IN  ('File1', 'File2')

GROUP BY j.JobID , j.Desc
HAVING COUNT(DISTINCT FileName)  = 2

Только для тех заданий, в которых есть только эти два файла, используйте условное агрегирование.

Select j.JobID , j.Desc
from Jobs j 
inner join Docs d 
   on j.JobId = d.jobId 

GROUP BY j.JobID , j.Desc
HAVING COUNT( DISTINCT CASE WHEN FileName IN ('File1', 'File2') 
                            THEN FileName 
                       END)  = 2
   AND COUNT(FileName) = 2
0 голосов
/ 07 мая 2018
Select * from DOCS inner join jobs on jobs.jobID=docs.jobID ORDER BY filename

PS Я не очень хорош в базах данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...