SQL-запрос для приведенного ниже сценария - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть 3 таблицы 1 с подробностями об ученике 2 с подробностями об элементе и 3 с подробностями об окончании учащихся.

**Table 1**

Stud Id     Stud Name    
1           aaa    
2           bbb    
3           ccc

**Table 2**
Item ID Item Name       
I1      Item1       
I2      Item2       
I3      Item3   

Это то, что я получаю, когда я соединяю эти 3 таблицы.

Примечание: в таблице завершения не будет записи, если учащийся не завершил элемент.

**Table 3**     
Stud Id     Item ID Completion date    
1           I1          1/1/2000    
1           I2          1/2/2000    
3           I2          3/3/2003

Требуемый результат

Stud Id     Item ID completion date    
2           I2          NULL    
1           I3          NULL

введите код здесь В 3-ей таблице не будет записей с датой завершения, равной нулю

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Я думаю, это то, что ты ищешь -

SELECT TempTable.StudID, TempTable.ItemID, Table3.CompletionDate FROM
(select t1.StudID, t2.ItemID
FROM 
Table1 t1 
cross join Table2 t2) TempTable 
left join Table3 ON TempTable.StudID = Table3.StudID AND TempTable.ItemID = Table3.ItemID
WHERE Table3.CompletionDate IS NULL 
0 голосов
/ 08 февраля 2019

Я бы просто написал это как:

select s.student_id, c.item_id, c.completion_date
from students s cross join
     items i left join
     completion c
     on c.student_id = s.student_id and c.item_id = i.item_id
where c.completion_date is null;

cross join генерирует все комбинации учеников и предметов.left join сохраняет все эти строки и добавляет соответствующие даты завершения.Предложение where сохраняет несоответствия.

0 голосов
/ 08 февраля 2019
SELECT stud.*, itm.*, comp.*
FROM student stud, item itm
LEFT OUTER JOIN completion comp
  ON stud.id = comp.studentId AND itm.id = comp.itemId
WHERE comp.studentId IS NULL

Это выбирает все строки из student и item, для которых есть нет записи в completion.

Базовым выбором является крест продукт всех student с и всех item с.

Соединение external соединяет student, item и completion без ограничение выбора строк.

Условие WHERE затем ограничивает результирующий набор только теми строками, которые после внешнего соединения имеют NULL studentId в completion (любоедругой ненулевой столбец completion будет работать.)

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