Postgresql-如果没有满足多对多关系中的条件,则选择此选项

Postgresql-如果没有满足多对多关系中的条件,则选择此选项,postgresql,Postgresql,我有这些桌子。通过“Item_ads”表(多对多),每个项目组都有许多项目 项目组(Id) 项目(id|状态) 项目广告(id |项目组|项目id |项目id) 我想获取所有项目组,其中没有一个项目的状态为“成功”。如果只有一个我不必选择它,那么没有人必须是“成功”的 我试过了,但没用 SELECT item_groups.id FROM item_groups INNER JOIN item_ads ON item_ads.item_group_id = item_groups.i

我有这些桌子。通过“Item_ads”表(多对多),每个项目组都有许多项目

项目组(Id)

项目(id|状态)

项目广告(id |项目组|项目id |项目id)

我想获取所有项目组,其中没有一个项目的状态为“成功”。如果只有一个我不必选择它,那么没有人必须是“成功”的

我试过了,但没用

SELECT

    item_groups.id

FROM item_groups
INNER JOIN item_ads ON item_ads.item_group_id = item_groups.id
INNER JOIN items    ON items.id = item_ads.item_id
WHERE NOT EXISTS (
    SELECT 1 FROM items WHERE items.crawling_status = 'success'
)

您的WHERE条件适用于所有数据库。这意味着,若数据库中只存在一个成功项,则该值为真(不存在)。必须指定要在条件中检查的项目类型。在这种情况下,您希望项目属于某个项目组。你可以这样做:


SELECT
    item_groups.id
FROM item_groups
INNER JOIN item_ads ON item_ads.item_group_id = item_groups.id
INNER JOIN items ON items.id = item_ads.item_id
WHERE NOT EXISTS (
    SELECT 1 FROM items  WHERE item.status = 'success' 
    AND item_ads.item_id = items.id
)
如果希望只获取每个
项目组.id
一次,还可以按项目组.id添加

我也不明白你的意思

如果只有一个我不必选择它,那么没有人必须是“成功”的