【发布时间】:2017-11-15 17:14:57
【问题描述】:
我有一个 SQL 查询 (T-SQL),其中我在 SELECT 语句中有一个子查询。
这是一个简化版:
SELECT
p.id AS id,
(SELECT
jobs_without_price.id
FROM
st_job jobs_without_price
WHERE
jobs_without_price.person_id = p.id
AND
jobs_without_price.price IS NULL
FOR XML AUTO, ROOT('jobs')) AS JobsWithoutPrice
FROM
st_person p
WHERE
JobsWithoutPrice IS NOT NULL
GROUP BY
p.id
问题是 SSMS 告诉我
列名“JobsWithoutPrice”无效。
这几乎可以肯定是因为 SQL 不允许在 WHERE 子句中使用别名,但我还能如何使用此子查询的结果来过滤结果?
[完整查询在SELECT 语句中有更多的表连接和更多,所有这些都与单个person 记录有关,而子查询返回多个记录,这就是它的原因在子查询中。]
【问题讨论】:
-
您需要查看一列,而不是整个查询。所以 JobsWithoutPrice.id ID NOT NULL
-
table 为 null 的语法无效。其中 table.column 为 null 是有效的。
-
尝试
JobsWithoutPrice.id IS NOT NULL会导致错误“无法绑定多部分标识符“JobsWithoutPrice.id”。”,无论我是否有FOR XML修饰符。 -
Jobswithoutprice.id从外部查询引用时不是有效字段。我在下面的回答应该可以帮助您理解原因。你可以选择id IS NOT NULL。
标签: sql sql-server tsql subquery