我有这张桌子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 ...
希望我清楚
问候
保罗
退后一步,问问自己:您是否真的需要返回不存在的行来解决您的问题?我怀疑答案是否定的。您的应用程序逻辑可以确定未返回记录,这将使您简化查询。
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如果您需要进行进一步的过滤,则可以在最后添加一个子句。
| 归档时间: |
|
| 查看次数: |
5052 次 |
| 最近记录: |