作为表结构的示例:
CREATE TABLE group (group_id int primary key, group_name string unique)
CREATE TABLE gitems (gitem_id int primary key, ...)
CREATE TABLE group_gitem (group_id int foreign key, gitem_id int foreign key)
CREATE TABLE object_gitem (gitem_id int foreign key, object_id string foreign key)
CREATE TABLE object (object_id string primary key, ...)
我想选择出现在一个特定组中的所有 object_ids,但不选择出现在多个组中的 object_ids。我已经尝试了以下查询,但它没有按照我希望的方式执行,并且实际上没有返回任何内容。
SELECT object_id, COUNT(group_id) AS link_count FROM group
LEFT JOIN group_gitem ON group_gitem.group_id = group.group_id
LEFT JOIN object_gitem ON object_gitem.gitem_id = group_gitem.gitem_id
GROUP BY object_id
HAVING link_count <= 1 AND group_id = 0
我计划使用 object_ids 删除磁盘上各自的 jpg 图像,例如 aBjf9k4d9l.jpg
将链接到 object_id 值 aBjf9k4d9l
。然后,我计划删除该组和所有相关项目,同时保留仍链接到另一组的对象,即使它存在于我计划从数据库中删除的组中。
最佳答案
使用集合操作通常比连接更简单:
WITH og AS (
SELECT object_id,
group_id
FROM object_gitem
JOIN group_gitem USING (gitem_id)
)
SELECT object_id
FROM object
WHERE object_id IN (SELECT object_id
FROM og
WHERE group_id = 0)
AND object_id NOT IN (SELECT object_id
FROM og
WHERE group_id <> 0);
关于java - 从一个表中选择仅通过两个一对多表连接到另一个表中的一个值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41417753/