在SQLite中查看创建

时间:2014-04-29 19:08:54

标签: sqlite view relational-database

在Stack Overflow和其他外部源上查看了几个matrial,我试图编写一段代码来生成一个利用其他表中的数据进行计算的视图。代码的目的是:

  1. 从UserDetails表中获取用户名
  2. 从UserDetails表中获取重量(磅)
  3. 从心血管记录表中获取distance_in_miles
  4. 在计算中使用重量和距离,如下所示,输出为caloriesBurned列。
  5. 我的尝试可以在下面看到:

    CREATE VIEW CardioCaloriesBurned (username, weight, distance, caloriesBurned) AS
    SELECT UserDetails.username, UserDetails.weight_in_pounds,
    CardiovascularRecords.distance_in_miles , 
    ((0.75 X weight_in_pounds) X distance_in_miles)
    FROM UserDetails, CardiovascularRecords
    

    如果有人可以帮助纠正这个问题,我们将不胜感激。

    编辑:我在SQLite Manager中收到与"("然而我自己没有看到任何问题。)的语法错误。

    编辑:下面的心血管表和用户详细信息表的代码:

    CREATE TABLE "CardiovascularRecords" ("record_ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE CHECK (record_ID>0) , "distance_in_miles" REAL NOT NULL CHECK (distance_in_miles>0) , "username" TEXT NOT NULL , "date" DATETIME DEFAULT CURRENT_DATE, "notes" TEXT(50), "start_time" TEXT, "end_time" TEXT, FOREIGN KEY(distance_in_miles) REFERENCES DistanceinMiles(distance_in_miles) ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY(username) REFERENCES UserDetails(username) ON DELETE CASCADE ON UPDATE CASCADE)
    
    
    CREATE TABLE "UserDetails" ("username" TEXT PRIMARY KEY  NOT NULL  UNIQUE  CHECK (length(username)>0), "password" TEXT NOT NULL  CHECK (length(password)>3), "email_address" TEXT NOT NULL  UNIQUE CHECK (length(email_address)>3) , "weight_in_pounds" REAL NOT NULL CHECK(weight_in_pounds>0) CHECK (length(weight_in_pounds)>0), "height_in_inches" REAL NOT NULL CHECK(height_in_inches>0) CHECK (length(height_in_inches)>0), "age" INTEGER CHECK(age>0), WITHOUT ROWID)
    

    由于

    JHB92

1 个答案:

答案 0 :(得分:0)

您的即时错误消息可能是因为您使用字母X来表示乘法。它应该是*(美国键盘上的首字母8)。

在您解决了这个问题后,您可能会发现输出中的结果比预期的要多得多。那是因为你没有告诉数据库 CardiovascularRecords中哪个记录为了进行计算而“挂钩”。这可能会也可能不会(可能不会)产生你想要的结果。

如果您没有得到您想要的东西,您必须告诉我们UserDetails中哪些列“指向”CardiovascularRecords中适用于任何给定计算的记录。

CREATE VIEW CardioCaloriesBurned AS
SELECT UserDetails.username AS username, 
       UserDetails.weight_in_pounds AS weight,
       CardiovascularRecords.distance_in_miles AS distance, 
       ((0.75 * weight_in_pounds) * distance_in_miles) AS caloriesBurned
FROM UserDetails INNER JOIN CardiovascularRecords
ON UserDetails.username = CardiovascularRecords.username