小编典典

SQL Server中具有多个列的'In'子句

sql

我有一个组件,可以根据提供的密钥从数据库中检索数据。但是,我希望我的Java应用程序在单个数据库命中中获取所有键的所有数据以加快处理速度。当我只有一个键时,可以使用’in’子句。

在使用多个键时,我可以在oracle中使用以下查询

SELECT * FROM <table_name> 
where (value_type,CODE1) IN (('I','COMM'),('I','CORE'));

这类似于写作

SELECT * FROM <table_name> 
where value_type = 1 and CODE1 = 'COMM'

SELECT * FROM <table_name> 
where value_type = 1 and CODE1 = 'CORE'

一起

但是,这种使用“ in”子句的概念在“ SQL Server”中给出了以下错误

ERROR:An expression of non-boolean type specified in a context where a condition is expected, near ','.

请让他们知道它们是否可以在SQL Server中达到相同的目的。


阅读 302

收藏
2021-04-22

共1个答案

小编典典

该语法在SQL Server中不存在。使用的组合AndOr

SELECT * 
FROM <table_name> 
WHERE 
  (value_type = 1 and CODE1 = 'COMM')
  OR (value_type = 1 and CODE1 = 'CORE')

(在这种情况下,您可以缩短它,因为value_type在两种组合中都与相同的值进行比较。我只想显示在Oracle中具有多个字段的类似于IN的模式。)


在子查询中使用IN时,您需要这样重新措辞:

甲骨文:

SELECT * 
FROM foo 
WHERE 
  (value_type, CODE1) IN (
    SELECT type, code 
    FROM bar
    WHERE <some conditions>)

SQL Server:

SELECT * 
FROM foo 
WHERE 
  EXISTS (
    SELECT * 
    FROM bar 
    WHERE <some conditions>
      AND foo.type_code = bar.type 
      AND foo.CODE1 = bar.code)

根据情况,还有其他方法,例如内部联接等。

2021-04-22