【问题标题】:View Creation in SQLite在 SQLite 中创建视图
【发布时间】:2014-06-15 21:33:49
【问题描述】:

在 Stack Overflow 和其他外部资源上查看了几个材料后,我正在尝试编写一段代码来生成一个视图,该视图利用其他表中的数据执行计算,代码的目的是:

  1. 从 UserDetails 表中获取用户名
  2. 从 UserDetails 表中获取以磅为单位的重量
  3. 从心血管记录表中获取 distance_in_miles
  4. 在计算中使用重量和距离,如下所示,输出为卡路里燃烧列。

我的尝试如下所示:

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 管理器中遇到与“(”相关的语法错误,但我自己没有看到任何问题。

编辑:下面的心血管表和 UserDetails 表的代码:

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

【问题讨论】:

  • 你应该JOIN 两个表。显示您的表架构?
  • 我在stackoverflow.com/questions/23297967/… 被告知上述方法可行吗?如果通过架构你是指代码或图像?可悲的是没有足够的图表代表
  • 顺便说一句,您最初的问题是关于创建视图,而不是 JOINing 表。
  • 不需要图表..您可以将架构文本粘贴到您的帖子中。

标签: sqlite view relational-database


【解决方案1】:

您的即时错误消息可能是由于您使用字母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

【讨论】:

  • OK .. OP指向的线程由你回答。在这种情况下,所有你的:)
  • 在 UserDetails 中的“用户名”是 Cardiovascular Records 使用的 FK
  • 每个 UserDetails 在 CardiovascularRecords 中是否只有一条记录?
  • 您想在输出中为用户拥有的每个 CardiovascularRecord 提供单独的答案吗?
  • 抱歉错过了您的评论,是的,我们的想法是为每条记录提供一个输出
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2021-08-15
相关资源
最近更新 更多