Как я могу объединить все это в один запрос SQL UPDATE? - PullRequest
1 голос
/ 24 марта 2011

Я пытаюсь объединить все это в один запрос, если это вообще возможно.Я использую SQLLite, поэтому у меня нет доступных хранимых процедур.

Простая версия запроса выглядит следующим образом:

UPDATE FoodIntake SET MealType = 'B' WHERE Time < LunchStrt AND Time > BreakfastStart

Однако время должно быть получено:

SET Time = RIGHT(DateTime, 8)

и LunchStart и BreakfastStart должны быть извлечены из таблицы Patient на основе параметра, передаваемого из программы.Вот так:

SELECT LunchStrt FROM Patient WHERE PatientId = :currentPatient AS LunchStrt
SELECT BrkStrt FROM Patient WHERE PatientId = :currentPatient AS BrkStrt

Я полагаю, что смогу наконец-то начать, поменяв время на ПРАВО (DateTime, 8):

UPDATE FoodIntake SET MealType = 'B' WHERE RIGHT(DateTime, 8) < LunchStrt AND RIGHT(DateTime, 8) > BreakfastStart

Но я не уверенправильный синтаксис для добавления LunchStrt и BrkStrt из таблицы Patient в обновление, если это возможно.

1 Ответ

1 голос
/ 24 марта 2011

Несколько заметок:

  • SQLite не имеет функции RIGHT, но вы можете использовать функцию substr и передать отрицательную стартовую позицию.
  • SQLite поддерживает троичный оператор МЕЖДУ ... И ... , поэтому вы можете написать WHERE substr(DateTime, -8) BETWEEN BreakfastStart AND LunchStrt
  • SQLite также поддерживает скалярные подзапросы , так что вы можете использовать их для получения конкретных значений, которые вы ищете

Объедините эти три варианта, и вы могли бы написать это:

UPDATE FoodIntake 
   SET MealType = 'B' 
 WHERE substr(Time, -8) 
        BETWEEN (SELECT BrkStrt FROM Patient WHERE PatientId = :currentPatient)
            AND (SELECT LunchStrt FROM Patient WHERE PatientId = :currentPatient)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...