SQL查询:如何使用一个查询检查是否存在多行

Pie*_*oli 3 sql oracle

我有这张桌子MyTable

PROG    VALUE
-------------
1       aaaaa
1       bbbbb
2       ccccc
4       ddddd
4       eeeee
Run Code Online (Sandbox Code Playgroud)

现在我正在使用类似的查询来检查是否存在具有特定ID的元组

SELECT COUNT(1) AS IT_EXISTS
FROM MyTable
WHERE ROWNUM = 1 AND PROG = {aProg}
Run Code Online (Sandbox Code Playgroud)

例如,我获得aProg = 1:

IT_EXISTS
---------
   1
Run Code Online (Sandbox Code Playgroud)

我得到aProg = 3:

IT_EXISTS
---------
   0
Run Code Online (Sandbox Code Playgroud)

问题是我必须执行多个查询,每个查询都要检查一个PROG值。

我想要的是带有查询的东西

SELECT PROG, ??? AS IT_EXISTS
FROM MyTable
WHERE PROG IN {1, 2,3, 4, 5} AND {some other condition}
Run Code Online (Sandbox Code Playgroud)

我可以得到像

PROG     IT_EXISTS
------------------
   1        1
   2        1
   3        0
   4        1
   5        0
Run Code Online (Sandbox Code Playgroud)

数据库是Oracle ...

希望我清楚

问候

保罗

Asa*_*aph 6

退后一步,问问自己:您是否真的需要返回不存在的行来解决您的问题?我怀疑答案是否定的。您的应用程序逻辑可以确定未返回记录,这将使您简化查询。

SELECT PROG
FROM MyTable
WHERE PROG IN (1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

如果返回给定PROG值的行,则该行存在。如果不是,则不存在。

更新:

在对以上问题的评论中,您说:

prog值来自其他表。问题表仅包含所有prog值的一部分

这向我表明,简单的左外部联接可以解决问题。假设另一个表中包含PROG您感兴趣的值MyOtherTable,那么这样的方法应该起作用:

SELECT a.PROG,
CASE WHEN b.PROG IS NOT NULL THEN 1 ELSE 0 END AS IT_EXISTS
FROM MyOtherTable AS a
LEFT OUTER JOIN MyTable AS b ON b.PROG = a.PROG
Run Code Online (Sandbox Code Playgroud)

WHERE如果您需要进行进一步的过滤,则可以在最后添加一个子句。