我有一个如下所示的查询:
SELECT PubKey, Title FROM Publication
UNION
SELECT NoteKey, Title, FROM Note
Run Code Online (Sandbox Code Playgroud)
效果很好。当我尝试向其中添加 EXIST 时,我的麻烦就开始了:
SELECT PubKey, Title FROM Publication
UNION
SELECT NoteKey, Title, FROM Note
WHERE EXISTS (SELECT * FROM UserPublication WHERE UserPublication.PubKey = Publication.PubKey)
Run Code Online (Sandbox Code Playgroud)
这会引发此错误:无法绑定多部分标识符“PubKey”。
可以用另一种方式写吗?
该WHERE条款是针对每个人的SELECT,因此您需要将现有的条款移至第一个,SELECT如下所示:
SELECT PubKey, Title FROM Publication
WHERE EXISTS (
SELECT *
FROM UserPublication
WHERE UserPublication.PubKey = Publication.PubKey
)
UNION
SELECT NoteKey, Title FROM Note
Run Code Online (Sandbox Code Playgroud)
但是,如果您想WHERE在整个结果集中指定该子句。这必须像这样完成:
SELECT * FROM (
SELECT PubKey, Title FROM Publication
UNION
SELECT NoteKey, Title FROM Note
) AS A
WHERE EXISTS (
SELECT *
FROM UserPublication
WHERE UserPublication.PubKey = A.PubKey
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16147 次 |
| 最近记录: |