我有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
在此处输入代码 第三张表中没有任何条目,且完成日期为空
答案 0 :(得分:0)
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
的叉积。
外部联接连接student
,item
和completion
,而没有限制行的选择。
然后,WHERE
条件将结果集限制为仅那些在外部联接之后在NULL
中具有studentId
completion
的行(任何其他非-completion
的空列将起作用。)
答案 1 :(得分:0)
我认为这可能是您要寻找的-
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
答案 2 :(得分:0)
我只是这样写:
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
子句保留不匹配项。