Insert语句不会在数据库中插入多行

时间:2012-08-25 14:02:17

标签: sql sql-server

这是学生图书馆项目的一部分。

共有2个表:alertsborrows

borrows包含studentIDbookIDdate of borrowing

alerts表示哪个学生逾期了多少本书。

代码应该为每个过期的学生插入一行,并计算过期的书籍数量。

Est_Return_Date = return_date + 30

insert into dbo.Alert (studentID, AlertCount)
    values ((select distinct (studentID )from dbo.Borrows
        where Est_Return_Date < GETDATE()
        and return_date is null),
        (select count( studentID) from dbo.Borrows
        where Est_Return_Date < GETDATE()
        and return_date is null ))

2 个答案:

答案 0 :(得分:2)

您需要使用GROUP BY而不是子查询,您想要的是每个studentId的结果,因此GROUP BY表示COUNT具有警报的行;

INSERT INTO dbo.Alert (studentID, AlertCount)
SELECT studentID,COUNT(*)
FROM dbo.Borrows
WHERE Est_Return_Date < GETDATE()
AND return_date is NULL
GROUP BY studentID;

演示here

答案 1 :(得分:1)

试试这个

 insert into dbo.Alert (studentID, AlertCount)
select studentId, count(*) as AlertCount from dbo.Borrows  where Est_Return_Date < GETDATE()
        and return_date is null group by studentId

考虑到你想做什么,你的查询将始终插入1个值 - 计数返回学生总数,可能你的另一个选择也只返回一个值。此查询将按学生分组,并在逾期时计算另一个表的总书数

here阅读有关群组的内容。如果它也是MySQL的工作原理。 另一个例子是here