是否有可能比较oracle兼容的sql中的元组?

use*_*715 9 sql oracle tuples

我不是百分之百,如果元组是我正在谈论的术语,但我正在看这样的事情:

Table grades
user    grade
------------
Jim     B
Bill    C
Tim     A
Jim     B+
Run Code Online (Sandbox Code Playgroud)

我知道我能做到:

SELECT COUNT(*)
FROM grades
WHERE (
   (user = 'Jim' AND grade = 'B')
   OR (user = 'Tim' AND grade = 'C')
);
Run Code Online (Sandbox Code Playgroud)

但有没有办法做更像这样的事情?

SELECT COUNT(*)
    FROM grades
    WHERE (user, grade) IN (('Jim','B'), ('Tim','C'));
Run Code Online (Sandbox Code Playgroud)

编辑:作为旁注,我只测试:

(user, grade) = ('Tim','C')
Run Code Online (Sandbox Code Playgroud)

那失败了,所以我认为IN也会失败,但我错了(谢天谢地!).

Jus*_*ave 17

您发布的查询应该是有效的语法

SQL> ed
Wrote file afiedt.buf

  1  with grades as (
  2    select 'Jim' usr, 'B' grade from dual
  3    union all
  4    select 'Bill', 'C' from dual
  5    union all
  6    select 'Tim', 'A' from dual
  7    union all
  8    select 'Jim', 'B+' from dual
  9  )
 10  select *
 11    from grades
 12   where (usr,grade) in (('Jim','B'),
 13                         ('Tim','C'),
 14*                        ('Tim','A'))
SQL> /

USR  GR
---- --
Jim  B
Tim  A
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是标准的ANSI SQL.这不仅受到Oracle的支持,还受到PostgreSQL,H2,HSQL和部分DB2的支持(只有`=`,但不是`IN`) (2认同)