我遇到了一个关于视图的小问题。 我自己学习了大多数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
答案 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关键字。因此,两个子类代表两个列,其中包含别名col1
和col2
。见下面的例子:
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;