Combine/Intersect 来自同一个 SQLite table 的结果

Combine/Intersect results from the same SQLite table

我有一个 items 的 table,包含以下列:

ID, name

这些项目的 table 的 properties,具有以下列:

item, property, value

(其中 item 是指向 items table 中的 ID 的 外键 - 显然“项目”可能来自零到多个不同的 属性-值对)

我想得到的是:

我已经设法获得了一个 属性 值的预期结果,如下所示:

SELECT items.id FROM items
INNER JOIN properties ON properties.item=items.id
WHERE items.name='person'
AND properties.property='someproperty' AND properties.value = 'somevalue'

而这个 returns 我是 do 具有 属性 someproperty 且值为 somevalue 的项目的 ID .

如果我想检查它是否有给定的一对,我会这样做:

SELECT items.id FROM items
INNER JOIN properties ON properties.item=items.id
WHERE items.name='person'
AND (
    (properties.property='someproperty' AND properties.value = 'somevalue') OR
    (properties.property='someproperty2' AND properties.value = 'somevalue2')
    ....
)

问题是我想要同样的东西,但是当它满足所有给定的属性时(技术上不是 OR 而是 AND)。

我该怎么做?

有什么想法吗?

使用group byhaving如下:

SELECT items.id FROM items
INNER JOIN properties ON properties.item=items.id
WHERE items.name='person'
group by items.id  
having count( case when
    (properties.property='someproperty' AND properties.value = 'somevalue') OR
    (properties.property='someproperty2' AND properties.value = 'somevalue2')
     then 1 end ) = 2 -- this number is property value pair from above expression