我需要编写一个写SQL查询,该查询基于选择标准的多个元组从表中选择值。可以使用这样的where子句来完成:
where (a = 1 and b='a') or (a=5 and b='s')
是选择的最佳方法:
select a, pk from x where a in (1,5)
select b, pk from x where b in ('a','s')
并使用主键加入两个查询的结果?
您的意思是这样的东西[a self join
):
select x.a, x.pk
from x
join x x2 on x.pk=x2.pk
where x.a in (1,5)
and x2.b in ('a','s')
?
您可以在VALUES
中使用连接表表达式。您可以根据需要在VALUES
中添加任意多的行。它将在MSSQL
上运行:
DECLARE @x TABLE ( a INT, b CHAR(1) )
INSERT INTO @x
VALUES ( 1, 'a' ),
( 1, 'b' ),
( 1, 'c' ),
( 2, 'd' ),
( 2, 'e' ),
( 5, 'f' ),
( 5, 's' )
SELECT x.*
FROM @x x
JOIN (
VALUES ( 1, 'a'),
( 5, 's')
) AS v( a, b ) ON x.a = v.a AND x.b = v.b
输出:
a b
1 a
5 s
根据我的理解,您想编写一个结合使用两个过滤器的SQL。这是一个适用于任何数据库的简单解决方案。在同一张表中创建一个新列,例如“ COLUMN_NEW”,或使用新列(以及原始表中的现有列)构建临时表或视图。在“ COLUMN_NEW”中插入列a和列b的串联值。根据您提到的示例,“ COLUMN_NEW”中的值将为“ 1a”和“ 5s”现在,您可能在不同的数据库中使用不同的concat语法。 SQL Server中的示例concat(a,b)。从表中选择记录的SQL将是select * from table where COLUMN_NEW in ("1a",5s");