我有一个具有唯一ID和竞争名称的SQL数据库,因此:
ID CompetitionName
1 August Running Race
2 Running Race August
3 Running Race August
4 Running Race August.
5 Cycling Race
6 Cycling Race September
请注意,即使CompetitionName相同,每一行都会获得自己的ID。
然后我有一个文件,使用规则将这些竞争名称合并到合理的组中。规则可以是“等于”或“包含”。包含规则意味着如果上表中的CompetitionName以任何顺序包含“RuleA”下的内容以及“RuleB”下的内容(如果RuleB不为空白),那么我们应该将该竞争名称和ID用于我们的新表和在第三栏(比赛)下,应从下面列出比赛条目。对于等于规则,标题必须与RuleA完全匹配。
RuleType RuleA RuleB Competition
Contains Running Race August August Running Race
Equals Cycling Race September Cycling Race
所以我想要的输出是:
ID CompetitionName Competition
1 August Running Race August Running Race
2 Running Race August August Running Race
3 Running Race August August Running Race
4 Running Race August. August Running Race
5 Cycling Race September Cycling Race
Cycling Race September不包含在此新表中,因为它与任何规则都不匹配。
在我目前的代码中,我使用like语句一次执行一条规则:
select ID
from table1
where
(CompetitionName LIKE '%Running Race%' and CompetitionName LIKE '%August%')
但是,我想从表中自动采用这些规则而不是输入它们,并且当规则适用时也从第二个表中获取相应的竞赛条目,因此我们有这些条目的标准竞争名称。我该如何解决这个问题?如果您有任何解决方案的想法,请告诉我,因为它是建立在上面的东西。
答案 0 :(得分:1)
我不确定第一部分,但是第二部分似乎是一个存储过程,使用临时表/表变量来存储标准竞争名称。然后你可以从中选择。
答案 1 :(得分:1)
假设数据库中有rules
表,您可以
select t.ID, t.CompetitionName, r.competition
from table1 t, rules
where CompetitionName like
(case when ruletype = 'Contains' then '%' + RuleA + RuleB + '%' end)
or CompetitionName in (case when ruletype = 'Equals' then RuleA end)
然而,这不是理想的方法,你应该专注于纠正表格设计。