2016-01-10 1 views
0

У меня есть 2 связанные таблицы: «Университеты» (id, num_courses) и «Курсы» (id, university_id). Мне нужно, чтобы University.num_courses представлял COUNT курсов.Обновление значений таблицы HSQL на основе соответствующей таблицы

Я могу запросить данные мне нужно:

SELECT 
Universities.id, 
COUNT(Courses.university_id) as NumCourses 
FROM Courses 
JOIN Universities ON Universities.id = Courses.university_id 
GROUP BY Universities.id 

Как обновить университеты с ним? Это можно сделать автоматически?

+2

Это вообще плохой дизайн базы данных для хранения вычисленного значения в таблице - расчетные значения должны просматриваться и обрабатываться с помощью запросов или представлений. Почему вы хотите это сделать? Возможно, мы можем предложить лучший способ получить конечное использование, которое вы ищете. – Lyrl

+0

Что касается «автоматически», вы можете настроить «триггер» в своей базе данных, если ваш сервер поддерживает его. Базовый сервер HSQLDB версии 1.8 по умолчанию, заложенный в Base, не поддерживает * триггеры поддержки *, а вам нужно обновить до бэкэнда «split» (т. Е. Не с zipped внутри базы) версии HSQLDB версии 2 или другой другой базы данных по вашему выбору. – Lyrl

+0

@Lyrl Я полностью согласен с вами, но ситуация сложная. В принципе, я помогаю другу, у которого есть проект базы данных, и его учитель одобрил проект, который они создали вместе. Он не так хорош в отношении баз данных (ни я), ни страхов, чтобы отойти от дизайна, о котором они договорились, но в то же время должен реализовать эти неэффективные решения. Возможно, это часть образования, предназначенная для подготовки к корпоративной работе = D –

ответ

1

Я не уверен, что это то, что вы имеете в виду под «автоматически», но это может быть сделано с помощью цикла:

Sub UpdateUniversities 
    Context = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
    databaseURLOrRegisteredName = "file:///C:/Users/JimStandard/Desktop/New Database.odb" 
    Db = Context.getByName(databaseURLOrRegisteredName) 
    Conn = Db.getConnection("","") 'username & password pair - HSQL default blank 
    Stmt = Conn.createStatement() 
    strSQL = "SELECT Universities.id, " & _ 
     "COUNT(Courses.university_id) as NumCourses " & _ 
     "FROM Courses " & _ 
     "JOIN Universities ON Universities.id = Courses.university_id " & _ 
     "GROUP BY Universities.id" 
    oResult = Stmt.executeQuery(strSQL) 
    Do While oResult.next() 
     university_id = oResult.getLong(1) 
     num_courses = oResult.getLong(2) 
     Stmt = Conn.createStatement() 
     strSQL = "UPDATE ""Universities"" SET ""num_courses"" = " & _ 
      num_courses & " WHERE ""id"" = " & university_id 
     Stmt.executeUpdate(strSQL) 
    Loop 
    Conn.close() 
End Sub 

Связанный: How to create an update query with Open Office Base?

+0

Обратите внимание, что это макрос, который нужно периодически запускать или привязывать к какому-либо событию, например, к кнопке формы. – Lyrl