有没有办法选择SQL中成对列表中的行?

有没有办法选择SQL中成对列表中的行?,sql,sqlite,Sql,Sqlite,我有一个表FOO,定义如下: id INTEGER, type INTEGER, data VARCHAR(32), PRIMARY KEY(id, type) 我得到了一个对的列表:(id,type),我想得到与这些对对应的所有数据(以及id和type,这样我就知道什么属于什么)。我可以在一个查询中完成此操作吗?(我特定的SQL方言是SQLite)在SQLite中执行此操作的唯一方法是在where子句中执行一组或语句。或者,您可以这样做: select f1.* from

我有一个表FOO,定义如下:


id   INTEGER,
type INTEGER,
data VARCHAR(32),
PRIMARY KEY(id, type)

我得到了一个对的列表:(id,type),我想得到与这些对对应的所有数据(以及id和type,这样我就知道什么属于什么)。我可以在一个查询中完成此操作吗?(我特定的SQL方言是SQLite)

在SQLite中执行此操作的唯一方法是在
where
子句中执行一组
语句。或者,您可以这样做:

select
    f1.*
from
    foo f1
    inner join (
        select 'id1' as id, 'type1' as type union all
        select 'id2', 'type2' union all
        select 'id3', 'type3'
    ) f2 on
        f1.id = f2.id
        and f1.type = f2.type
对于教化,
where
子句方法是:

select
    *
from
    foo
where
    (id = 'id1' and type = 'type1')
    or (id = 'id2' and type = 'type2')
    or (id = 'id3' and type = 'type3')

如果你有很多对,你也可以有第二张桌子来放这些对

select
    foo.*
from
    foo
    inner join pairs
        on foo.id = pairs.id and foo.type = pairs.type 

“何处”方法执行得更快吗?@chacham15-不一定
s确实会破坏性能。
内部连接将构建一个哈希表并快速连接表,而不是遍历谓词列表。也就是说,两种方法都试一下,看看哪一种更快。我通常在SQL Server中工作,其中where子句中的
是一个死亡丧钟。标准SQL只有一个数据结构:行表。我假定SQLite没有“对”或“列表”的数据结构。请澄清您在表格、行、列、标量参数等方面的要求。谢谢。