回答

收藏

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

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

雇员表具有ID和NAME列。名称可以重复。我想找出是否至少有一个名称类似“ kaushik%”的行。
% u8 S$ t: ?3 P2 n因此查询应返回true / false或1/0。
# H0 X' k. }* r  ^是否可以使用单个查询找到它。如果我们尝试类似
' T" }  t) v" A$ k% D1 `select count(1) from employee where name like 'kaushik%': {- ^3 Q" m7 c2 ~
在这种情况下,它不会返回true /
% H5 @* F4 g3 m7 nfalse。另外,我们正在遍历表中的所有记录。简单SQL中是否存在这样的方式,使得每当获取满足条件的第一条记录时,它都应停止检查其他记录。还是只能在Pl /
7 }+ r( F7 P9 Q: b( |- jSQL块中处理这样的事情?4 K- t1 e& i- q; ?+ c, j3 w$ j: F
_***_编辑贾斯汀提供的第一种方法看起来正确答案4 D4 X% j$ V% g
SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1
/ w8 g: ~0 T7 ?( y                2 A: T$ r0 ?! Y: y; [
解决方案:
# W7 S) s! O$ S3 ]% d% e, \' s3 L2 t               
9 X# d6 m( `' r  }) q0 n' d7 `- ~4 ^2 j- [1 ~

% u2 j9 {$ N; _5 C6 {. V. e, ]                通常,您可以将其表示为
1 I5 F$ \9 f" d2 }! t- wSELECT COUNT(*)
  w( i) c2 g! X$ |" ?1 w. }- \  FROM employee+ Z7 W1 A- j, {& Z4 {  S  z
WHERE name like 'kaushik%'
! {, r. r/ L# U5 e' T9 D6 B3 s   AND rownum = 1
' F( y8 `" W% k其中rownum = 1谓词允许Oracle,就立即停止寻找,因为它找到的第一个匹配行或
# y, \" q" Q3 o& s& j% D; ^SELECT 1
$ }4 `0 b+ w6 K: w1 R  FROM dual
, L9 S+ M' W  x WHERE EXISTS( SELECT 1: m0 Q) R4 o; G; V, P; w8 [' H& f8 S
                 FROM employee
. z, w+ Z' @; \: K0 I( C                WHERE name like 'kaushik%' )5 i4 U  ]0 }6 _2 t1 N6 H# Q
该EXISTS子句允许Oracle在找到第一个匹配行后立即停止查找。3 c: q' `+ m- e/ @# _
第一种方法更紧凑,但是在我看来,第二种方法更清晰一些,因为您实际上是在确定是否存在特定的行,而不是尝试计数。但是第一种方法也很容易理解。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则