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 中添加一行可能会使其他所有人的促销无效。
示例 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 中添加一行可能会使其他所有人的促销无效。