具有多列的SQL Server中的“In”子句

前端之家收集整理的这篇文章主要介绍了具有多列的SQL Server中的“In”子句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@我有一个组件,它根据提供的密钥从数据库中检索数据.
但是我希望我的 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’中给出了以下错误

错误:在预期条件的上下文中指定的非布尔类型的表达式,靠近’,’.

请告诉我们是否有任何方法可以在sql Server中实现相同的功能.

解决方法

sql Server中不存在此语法.使用And和Or的组合.
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)

还有其他方法可以做,具体取决于案例,如内连接等.

猜你在找的MsSQL相关文章