如何在新表中定义派生属性时使用另一个表中的属性?

时间:2016-11-16 17:02:49

标签: sql-server sql-server-2008

例如:我有一个表“Children”,它具有属性“age”。我现在正在创建一个表“学生”,它只继承了来自孩子的主键“SSN”,但它应该有一个属性“grade”,它来自相应的孩子的年龄(Children.age - 5)。

这是我编写并尝试过的,导致语法错误:

  

“在此上下文中不允许使用子查询。只允许使用标量表达式。”

create table Children
(
    SSN int, 
    age int, 
    primary key(SSN)
)

create table Students
(
    SSN int, 
    grade as (select C.age from Children C, Students S where C.SSN = S.SSN) - 5, 
    primary key(SSN)
)

即使我知道它没有意义,因为select查询不一定会返回一个int值,因为在我尚未创建的子查询中使用表是没有意义的,但我想我在这里添加它,看看是否有某种方法可以使用类似于我尝试过的方式工作的子查询。

我正在使用SQL Server 2008。

2 个答案:

答案 0 :(得分:1)

正常创建两个表,然后使用视图连接两个表并为等级创建虚拟列。

例如:

Select c.*, s.*, (c.age - 5) as grade from children c
Inner join student s on s.childid = c.id

答案 1 :(得分:1)

使用视图:

CREATE VIEW Students AS
  SELECT c.*,
         Grade = c.age - 5
    FROM Children c