无法查询别名 table
Cannot query an alias table
我正在做类似的事情:
SELECT T1.NAME, T2.DATE
FROM T1
INNER JOIN
(
SELECT * FROM OTHERTABLE
) AS T2 ON T2.USERID = T1.USERID
有效,但如果我查询别名 table,我会收到一条错误消息,指出 T2 是无效的对象名称。
示例:
SELECT
T1.NAME,
T2.DATE,
CASE
WHEN EXISTS (SELECT TOP 1 1 FROM T2 WHERE T2.THISFIELD = T1.THISFIELD) THEN 'HELLO'
ELSE 'BYE'
END AS COMMENT -- THIS ALSO FAILS
FROM T1
INNER JOIN
(
SELECT * FROM OTHERTABLE
) AS T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM T2) > 0
我以为我就是这么做的,"create" T2。有什么方法可以像这样使用 T2 吗?
我的目标是从 OTHERTABLE
中抓取所有相关数据一次,因为我将在 SELECT 子句中有很多 CASE,具体取决于数据是否存在于 T2 中。我不想为每个字段都执行 EXISTS,因为那样每次都会在巨大的 table 中启动一个新查询。
您的查询使用了 SELECT * FROM OTHERTABLE
的子查询,这没有意义。你可以这样修改它;
SELECT
T1.NAME,
T2.DATE,
...
FROM T1
JOIN OTHERTABLE T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM OTHERTABLE ) > 0
您不能在同一查询中多次使用子查询。而是为此目的使用 Common Table Expression (CTE)。 T2 是以下示例中的 CTE。
;WITH T2 AS
(
SELECT UserId, col1, col2, [Date]
FROM OtherTable
)
SELECT T1.NAME, T2.DATE
FROM T1
JOIN T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM T2) > 0
我正在做类似的事情:
SELECT T1.NAME, T2.DATE
FROM T1
INNER JOIN
(
SELECT * FROM OTHERTABLE
) AS T2 ON T2.USERID = T1.USERID
有效,但如果我查询别名 table,我会收到一条错误消息,指出 T2 是无效的对象名称。
示例:
SELECT
T1.NAME,
T2.DATE,
CASE
WHEN EXISTS (SELECT TOP 1 1 FROM T2 WHERE T2.THISFIELD = T1.THISFIELD) THEN 'HELLO'
ELSE 'BYE'
END AS COMMENT -- THIS ALSO FAILS
FROM T1
INNER JOIN
(
SELECT * FROM OTHERTABLE
) AS T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM T2) > 0
我以为我就是这么做的,"create" T2。有什么方法可以像这样使用 T2 吗?
我的目标是从 OTHERTABLE
中抓取所有相关数据一次,因为我将在 SELECT 子句中有很多 CASE,具体取决于数据是否存在于 T2 中。我不想为每个字段都执行 EXISTS,因为那样每次都会在巨大的 table 中启动一个新查询。
您的查询使用了 SELECT * FROM OTHERTABLE
的子查询,这没有意义。你可以这样修改它;
SELECT
T1.NAME,
T2.DATE,
...
FROM T1
JOIN OTHERTABLE T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM OTHERTABLE ) > 0
您不能在同一查询中多次使用子查询。而是为此目的使用 Common Table Expression (CTE)。 T2 是以下示例中的 CTE。
;WITH T2 AS
(
SELECT UserId, col1, col2, [Date]
FROM OtherTable
)
SELECT T1.NAME, T2.DATE
FROM T1
JOIN T2 ON T2.USERID = T1.USERID
WHERE (SELECT COUNT(*) FROM T2) > 0