无法查询别名 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