创建一个组合两个表的视图 ms sql server 2014

Posted

技术标签:

【中文标题】创建一个组合两个表的视图 ms sql server 2014【英文标题】:Create a view combining two tables ms sql server 2014 【发布时间】:2019-05-01 06:52:00 【问题描述】:

我需要创建一个结合两个表的视图:任务和状态

我所做的是:

CREATE VIEW todolist
select     tasks.taskname, 
           tasks.description 
FROM  status 
INNER JOIN tasks 
ON  status.statusid = tasks.statusid 
WHERE ( status.statusid = 1)

但是他们告诉我上面的例子是错误的 正确答案是:

CREATE todolist AS VIEW SELECT tasks.taskname, 
           tasks.description 
FROM  status 
INNER JOIN tasks 
ON  status.statusid = tasks.statusid 
WHERE ( status.statusid = 1)

这没有意义,因为上一个示例创建视图的语法错误,我的意思是第一行:

CREATE todolist AS VIEW SELECT tasks.taskname,

哪个是正确的答案?

【问题讨论】:

您在第一条语句中缺少视图的名称。 【参考方案1】:

你需要的是:

CREATE VIEW todolist 
AS 
SELECT tasks.taskname, tasks.description 
FROM  status 
INNER JOIN tasks 
ON  status.statusid = tasks.statusid 
WHERE ( status.statusid = 1)

完整语法描述here

【讨论】:

【参考方案2】:

首先,我建议使用表别名,以便查询更易于编写和阅读:

CREATE VIEW todolist AS
    SELECT t.taskname, t.description 
    FROM status s INNER JOIN
         tasks t
         ON s.statusid = t.statusid 
    WHERE s.statusid = 1;

(您的版本缺少AS。)更重要的是,不需要JOIN。您只使用来自tasks 的列,而WHERE 位于JOIN 列上。

所以,更好的写法是:

CREATE VIEW todolist AS
    SELECT t.taskname, t.description 
    FROM tasks t
    WHERE t.statusid = 1;

注意:这假设statusidstatus 中是唯一的,但这似乎是一个非常合理的假设。

如果您正在学习 SQL,那么您应该学习如何正确、简洁地编写查询。

【讨论】:

以上是关于创建一个组合两个表的视图 ms sql server 2014的主要内容,如果未能解决你的问题,请参考以下文章

跨表的 SQL Server 唯一索引

sql2005 中的把2个表创建成一个视图

[QT][SQL]sql学习记录5_sqlite视图(View)

MS SQL:通过包含新表中的其他列来更改索引视图

用于组合来自两个表的数据的 SQL 查询

sql中修改了基本表的数据视图也会自动随之修改吗?