Rav*_*avi 14 sql sql-server oracle
我有一个组件,它根据提供的密钥从数据库中检索数据.但是我希望我的java应用程序能够获取单个数据库中所有键的所有数据,以便加快操作.当我只有一个键时,我可以使用'in'子句.
在处理多个密钥时,我可以在oracle中使用下面的查询
SELECT * FROM <table_name>
where (value_type,CODE1) IN (('I','COMM'),('I','CORE'));
Run Code Online (Sandbox Code Playgroud)
这与写作类似
SELECT * FROM <table_name>
where value_type = 1 and CODE1 = 'COMM'
Run Code Online (Sandbox Code Playgroud)
和
SELECT * FROM <table_name>
where value_type = 1 and CODE1 = 'CORE'
Run Code Online (Sandbox Code Playgroud)
一起
但是,如上所述使用'in'子句的概念在'SQL server'中给出了以下错误
ERROR:An expression of non-boolean type specified in a context where a condition is expected, near ','.
请告知他们是否有任何方法可以在SQL服务器中实现相同的功能.
Ste*_*ger 10
SQL Server中不存在此语法.使用的组合And和Or.
SELECT *
FROM <table_name>
WHERE
(value_type = 1 and CODE1 = 'COMM')
OR (value_type = 1 and CODE1 = 'CORE')
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,你可以缩短它,因为value_type在两种组合中都与相同的值进行比较.我只是想在oracle中显示与多个字段一样的IN模式.)
将IN与子查询一起使用时,需要将其改为:
甲骨文:
SELECT *
FROM foo
WHERE
(value_type, CODE1) IN (
SELECT type, code
FROM bar
WHERE <some conditions>)
Run Code Online (Sandbox Code Playgroud)
SQL Server:
SELECT *
FROM foo
WHERE
EXISTS (
SELECT *
FROM bar
WHERE <some conditions>
AND foo.type_code = bar.type
AND foo.CODE1 = bar.code)
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以做,具体取决于案例,如内连接等.
| 归档时间: |
|
| 查看次数: |
18408 次 |
| 最近记录: |