如何将所有这些组合成一个SQL UPDATE查询?

时间:2011-03-24 05:11:25

标签: sql sqlite variables join sql-update

我试图将所有这些组合成一个查询,如果它甚至可能的话。我正在使用SQLLite,因此我没有可用的存储过程。

查询的简单版本如下:

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

但是必须得出时间:

SET Time = RIGHT(DateTime, 8)

并且必须根据从程序传递的参数从Patient表中引入LunchStart和BreakfastStart。像这样:

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

我想我终于可以通过交换Time for RIGHT(DateTime,8)来开始:

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

但是如果可能的话,我不确定在更新中从Patient表中引入LunchStrt和BrkStrt的正确语法。

1 个答案:

答案 0 :(得分:1)

一些注意事项:

  • SQLite没有RIGHT功能,但您可以使用substr功能并传递负起始位置。
  • SQLite确实支持BETWEEN ... AND ...三元运算符,因此您可以编写WHERE substr(DateTime, -8) BETWEEN BreakfastStart AND LunchStrt
  • SQLite还支持scalar subqueries,因此您可以使用这些来检索您正在寻找的特定值

结合这三个选项,你可以这样写:

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)