创建具有多个子查询的视图

时间:2014-06-23 12:12:29

标签: sql sql-server

我遇到了一个关于视图的小问题。 我自己学习了大多数SQL的东西,但是这个目前有点太多了,但是如果有任何修复,你能不能添加一个小的解释或链接到它,这样我就可以学习它而无需复制/粘贴解决方案。

这是我的问题:

CREATE VIEW [HMVIEW] AS
SELECT (select testid
from Alert, Action 
where alert.ID = Action.alertId) as col1,
select (SELECT SUBSTRING(Action.action, 2, CHARINDEX(' ', action.action) - 1)
from action)) as col2;

它在创建视图上出错,因为它说它必须是批处理中唯一的语句,但第二个选择(对于col2)是主要原因。它仅在使用col1时有效,但我需要同时查看2列。

对于未来可能最终阅读此内容的人:我忘了添加列应该连接在一起。我希望col1(testId)能够对它采取正确的操作。 例如:0001 | stoptestbyid

提前致谢&亲切的问候,

David Vandenbroucke

2 个答案:

答案 0 :(得分:2)

以下是您的查询:

SELECT (select testid
        from Alert, Action 
        where alert.ID = Action.alertId
       ) as col1,
select (SELECT SUBSTRING(Action.action, 2, CHARINDEX(' ', action.action) - 1)
from action)) as col2;

第一个select可能会返回多行 - 这是一个错误。第二个选择只是悬在那里。您可以将其修复为:

SELECT (select testid
        from Alert, Action 
        where alert.ID = Action.alertId
       ) as col1,
       (SELECT SUBSTRING(Action.action, 2, CHARINDEX(' ', action.action) - 1)
        from action) as col2;

但是,你很可能想要:

select testid, SUBSTRING(Action.action, 2, CHARINDEX(' ', action.action) - 1) as col2
from Alert join
     Action 
     on alert.ID = Action.alertId;

答案 1 :(得分:1)

您正在select语句中为子查询定义列别名,因此您只需要一个select关键字。您需要删除其他select关键字。因此,两个子类代表两个列,其中包含别名col1col2。见下面的例子:

CREATE VIEW [HMVIEW] AS
SELECT (select testid
from Alert, Action 
where alert.ID = Action.alertId) as col1,
(SELECT SUBSTRING(Action.action, 2, CHARINDEX(' ', action.action) - 1)
from action) as col2;