Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的Double-IN语句_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL中的Double-IN语句

SQL中的Double-IN语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,只是好奇SQL中的IN语句。 我知道我可以用一个值搜索多个列 'val1' IN (col1,col2) 并且可以在列中搜索多个值 col1 IN ('val1','val2') 但是,有没有一种方法可以同时执行这两项操作,而不必恢复到SQl中的重复和/或错误?我希望以最具可扩展性的方式来实现这一点,因此与我需要搜索多少VAL/COL无关。 因此,本质上: ('val1','val2') IN (col1,col2) 但是有效。您可以这样做: 当然,人们可能会争论,哪个版本更简洁。是

只是好奇SQL中的IN语句。 我知道我可以用一个值搜索多个列

'val1' IN (col1,col2)
并且可以在列中搜索多个值

col1 IN ('val1','val2')   
但是,有没有一种方法可以同时执行这两项操作,而不必恢复到SQl中的重复和/或错误?我希望以最具可扩展性的方式来实现这一点,因此与我需要搜索多少VAL/COL无关。 因此,本质上:

('val1','val2') IN (col1,col2)

但是有效。

您可以这样做:


当然,人们可能会争论,哪个版本更简洁。

是的,例如,您可以在Oracle中这样做:

select x, y from (select 1 as x, 2 as y from dual)
where (x,y) in (select 1 as p, 2 as q from dual)

您正在使用什么rdbms?MySQL、Oracle、sql server?您的解释文本与示例不匹配,可能需要将其颠倒过来。:)不,您必须使用二次展开或交叉联接(根据具体的查询可能无法很好地执行)。如果存在这种情况,最多可以省去编写
和/或
逻辑的麻烦,无法避免将第一个集合中的每个值与第二个集合中的每个值进行比较,这样在性能方面就相当了。@Asad:确实存在这种情况(这是标准SQL)。但显然SQLServer不支持它。请看这里:这是可行的,尽管它与通过列表中的一个迭代和使用and/OR一样简洁,但我想我会倾向于在(col1,col2)中轻松阅读和使用“val1”或在(col1,col2)中使用“val2”
值(…)
使事情变得更好。请参阅更新的答案。但是是的。如果您只想比较两个具有2个值的列,请在
谓词:-)中使用常规的
-connected
)SQL Server不支持比较诸如PostgreSQL、Oracle或DB2(以及ANSI标准中定义的)等元组,这真是太遗憾了。此外,CUBRID、HSQLDB和MySQL也在启用元组比较的数据库上显示。但话说回来,SQL Server有用的
值(..)
表构造函数在大多数数据库中都不可用。。。
select x, y from (select 1 as x, 2 as y from dual)
where (x,y) in (select 1 as p, 2 as q from dual)