仅当数据时才使用sqlite INNER JOIN

时间:2018-05-12 12:46:14

标签: sql sqlite join restriction

表格示例:

促销(idPromo,nameUser)

公司(idCompany,nameCompany)

PromoCompany(idPromo,idCompany)

我尝试只使用一个查询,所有具有公司的促销(例如idCompany = 1)或0公司。

描述: PromoCompany是限制表...如果促销数据存在,促销只对这些公司有效,如果没有数据,促销对所有公司都有效。

示例:

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(因为不受限制)

1 个答案:

答案 0 :(得分:0)

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

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中添加一个标记,说明促销是否适用于所有公司或是否受限制。搜索表格有点尴尬 - 可能会让人感到困惑。向表中添加一行可能会使其他人的促销失效。

相关问题