回答

收藏

确定是否存在至少具有给定条件的一行

技术问答 技术问答 249 人阅读 | 0 人回复 | 2023-09-14

雇员表具有ID和NAME列。名称可以重复。我想找出是否至少有一个名称类似“ kaushik%”的行。
! ?- [; }8 P5 G因此查询应返回true / false或1/0。" ~3 B* E/ h/ d( C" ^; v( Y
是否可以使用单个查询找到它。如果我们尝试类似
3 w' B. \- m6 ^select count(1) from employee where name like 'kaushik%'
. e% M# ~) ~* l1 ?) w* ]9 a在这种情况下,它不会返回true // F% x, N/ E8 F3 _( `8 k
false。另外,我们正在遍历表中的所有记录。简单SQL中是否存在这样的方式,使得每当获取满足条件的第一条记录时,它都应停止检查其他记录。还是只能在Pl /
$ K7 [. \. C' C3 Q1 ]) b, K8 JSQL块中处理这样的事情?! S3 k# o# N2 c$ I! q
_***_编辑贾斯汀提供的第一种方法看起来正确答案3 n" D& b/ F) o3 f6 \
SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1
/ v8 \& K1 I) z5 O# q9 R! n                7 }3 I8 {" \: t1 g# q9 g
解决方案:
& d2 w1 d- N& Z, N# J2 x+ s% \               
8 ~% H* \; o3 K3 A9 p& W" U7 _, R$ ]( s: _  @1 K7 `9 X

' b  t# n- V0 |5 @, T4 t                通常,您可以将其表示为
! s1 H( A5 J$ ], t$ `8 Y' G" x& H9 VSELECT COUNT(*)# u( [+ F% l$ k6 x
  FROM employee# m  l. g2 y7 ~, b! K$ S
WHERE name like 'kaushik%'0 u9 {+ R8 K3 U  b6 ~  U
   AND rownum = 1* q( x' I7 L2 e3 g1 Q* Q
其中rownum = 1谓词允许Oracle,就立即停止寻找,因为它找到的第一个匹配行或
0 L' c, U% Z% A$ e3 v: G" W. K4 L  Y/ ]3 TSELECT 1* T/ W1 k0 i! }! c) B! k
  FROM dual
' h: A: U! [, q; c& v8 a# H WHERE EXISTS( SELECT 1
& G' ?, B2 C3 r- X$ J: k; |                 FROM employee5 q( o4 f) p* ~. N5 G. P
                WHERE name like 'kaushik%' )
" f" v: W! R+ S' L/ J- f# v' j5 i该EXISTS子句允许Oracle在找到第一个匹配行后立即停止查找。# [) Y1 M. a0 y7 r7 \3 g
第一种方法更紧凑,但是在我看来,第二种方法更清晰一些,因为您实际上是在确定是否存在特定的行,而不是尝试计数。但是第一种方法也很容易理解。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则