sqlite INNER JOIN 只有当数据

sqlite INNER JOIN only if data

示例 tables :

促销(idPromo,nameUser)

公司(idCompany,nameCompany)

促销公司(idPromo,idCompany)

我尝试仅通过一个查询获取所有拥有公司(例如 idCompany = 1)或拥有 0 家公司的促销活动。

描述: PromoCompany 是一个限制 table...如果存在促销数据,则促销仅对这家公司有效,如果没有数据,则促销对所有公司都有效。

示例:

Promo[{
    idPromo:1
    namePromo:"promo test"
    },
    {
    idPromo:2
    namePromo:"promo test 2"
    }]
Company[{
    idCompany:10
    nameCompany:"CompanyPloof"
},{
    idCompany:12
    nameCompany:"CompanyPaf"
}
]
PromoCompany[{
    idPromo:1
    idCompany:10
},{
    idPromo:1
    idCompany:12
}
    ]

如果我的公司是 CompanyPloof,促销是 idPromo 1 et 2

如果我的公司是 CompanyPaf,促销是 idPromo 2(因为不受限制)

嗯。 . .这听起来像是两个条件:

select p.*
from promotions p
where exists (select 1 from promocompany pc where pc.idpromo = p.idpromo and p.idcompany = 1) or
      not exists (select 1 from promocompany pc where pc.idpromo = p.idpromo);

我建议对您的数据模型进行一些小改动。在 promotions 中添加一个标志,说明促销是否适用于所有公司或是否受到限制。必须搜索 table 有点尴尬——而且可能会造成混淆。在 table 中添加一行可能会使其他所有人的促销无效。