如何将 UNION 与 EXISTS 结合起来?

Bjø*_*dal 5 union exists

我有一个如下所示的查询:

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”。

可以用另一种方式写吗?

Wor*_*DBA 5

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)