【问题标题】:sqlite INNER JOIN only if datasqlite INNER JOIN 仅当数据
【发布时间】:2018-10-22 16:52:15
【问题描述】:

表格示例:

促销(idPromo, nameUser)

公司(idCompany,名称公司)

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

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。此外,您的查询尝试也会很有用。

标签: sql sqlite join restriction


【解决方案1】:

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

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 中添加一个标志,说明促销是否适用于所有公司或是否受到限制。必须在表格中进行搜索有点尴尬 - 并且可能会令人困惑。在表格中添加一行可能会使其他人的促销无效。

【讨论】:

  • 谢谢,我试试。我不能改变数据模型,这不是我的发展
猜你喜欢
  • 2020-09-19
  • 2019-03-03
  • 1970-01-01
  • 2014-06-23
  • 2015-08-15
  • 2018-01-08
  • 2022-01-08
  • 2019-03-02
  • 2018-06-27
相关资源
最近更新 更多