我仍然是MS-SQL的新手,不熟悉它的复杂查询。我试图找到不同的方法和简单的方法来编写以下要求的查询,而不使用光标或任何会降低性能的东西。
我有一个包含4列的链接表table1。 说A,B,C,D。
B是book1的ID,C是book2的ID。
我有另一个表table2(BooksInformation表),列数很少。 说W(BookID),X,Y,Z
table1的B列和C列只是将(外键)引用到table2的列W(主键)。因此,table1中的每一条记录都有两个条目。
我们有另一个表格3,列数很少 说E,F,G,H,I,J。
现在,table3的G列(BookID)是table2的W列(主键)的外键。 F列有 studentID
现在,当条件满足以下条件时,我想在table3中为student插入行:
如果学生包含Book1且他不包含Book2。
如果学生包含Book2且他不包含Book1。
确保Book2中存在Book1和Book2的ID。
Book1和Book2链接可以在table1中找到。
表1
Field Type Null
A Table1ID int(10) No
B BookIDFrom char(20) No
C BookIDTo char(20) No
D Desc varchar(20) No
表2
Field Type Null
W Table2ID char(20) No
X BookName char(20) No
Y BookDesc char(20) No
Z Amount decimal(10,6) No
表3
Field Type Null
E Table3ID char(20) No
F StudentID int(10) No
G BookID char(20) No
H Batch char(20) No
这是我迄今为止所尝试过的:
select *, tb3.StudentID, subtable.BookIDTo
from table3 tb3
right join
(select StudentID, tb1.BookIDTo
from table1 tb1
join table3 ED
on tb1.BookIDFrom = ED.BookID) subtable
on tb3.BookID = subtable.BookIDTo
and tb3.StudentID = subtable.StudentID
and tb3.BookID is null