假设我在Postgresql 12中有两个表,其中一个存储project
的基本数据,每个project
s可以有任意一组label
s:
CREATE TABLE projects (
id SERIAL,
title TEXT
);
CREATE TABLE labels (
id SERIAL,
projects_id INT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
key VARCHAR(127) NOT NULL,
value TEXT NOT NULL,
UNIQUE (projects_id, key)
);
字符串
现在我想创建一个查询,它返回所有projects
,这些projects
匹配labels
中的all多个键/值组合。我想使用“任意”数量(比如至少5个)的标签匹配。
选择projects
与一个标签完全匹配很简单:
SELECT
p.id, p.title
FROM projects p
JOIN labels l ON l.projects_id = p.id
WHERE l.key = 'k1' AND l.value = 'v1';
型
只是使用
SELECT p.id, p.title
FROM projects p
JOIN labels l ON l.projects_id = p.id
WHERE
l.key = 'k1' AND l.value = 'v1' AND
l.key = 'k2' AND l.value = 'v2';
型
它不起作用,我知道为什么。
什么是只使用SQL的最佳方法?
1条答案
按热度按时间b4qexyjb1#
您可以:
字符串