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 的 外键 - 显然“项目”可能来自零到多个不同的 属性-值对)
我想得到的是:
- 所有项目 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 by
和having
如下:
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
我有一个 items
的 table,包含以下列:
ID, name
这些项目的 table 的 properties
,具有以下列:
item, property, value
(其中 item
是指向 items
table 中的 ID 的 外键 - 显然“项目”可能来自零到多个不同的 属性-值对)
我想得到的是:
- 所有项目 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 by
和having
如下:
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