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

新手上路,请多包涵

我有一个组件可以根据提供的键从数据库中检索数据。但是,我希望我的 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 中实现相同的目标。

原文由 Ravi Maurya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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 服务器:

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

根据具体情况,还有其他方法可以做到这一点,例如内部连接等。

原文由 Stefan Steinegger 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 MS Sql 中计算

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

原文由 codejunkie 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进