SQL查询元组值

问题描述 投票:0回答:3

我需要编写一个写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')

并使用主键加入两个查询的结果?

sql nested tuples where
3个回答
0
投票

您的意思是这样的东西[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')


0
投票

您可以在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

0
投票

根据我的理解,您想编写一个结合使用两个过滤器的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");

© www.soinside.com 2019 - 2024. All rights reserved.