簡體   English   中英

SQL:將一個表用作另一表的“喜歡”語句的輸入

[英]SQL: Use one Table as Input for a 'Like' Statement on Another Table

我有一個具有唯一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不為空)(以任何順序排列),那么我們應該為新表使用該CompetitionName和ID,在第三列(競賽)下,應從下方輸入競賽條目。 對於equals規則,標題必須與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

九月的自行車比賽不包含在此新表格中,因為它不符合任何規則。

在當前的代碼中,我使用like語句一次執行一條規則:

select ID
from table1
where 
(CompetitionName LIKE '%Running Race%' and CompetitionName LIKE '%August%')

但是,我想從表中自動獲取這些規則,而不是鍵入它們,並且在應用規則時也要從第二個表中獲取相應的競賽條目,因此我們為這些條目使用了標准競賽名稱。 我將如何處理這個問題? 如果您有解決部分問題的想法,也請讓我知道,因為這是可以建立的。

我不確定第一部分,但是對於第二部分來說,這似乎是一個存儲過程,使用臨時表/表變量來存儲標准比賽名稱會起作用。 然后,您可以從中選擇。

假設數據庫中有一個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)

但是,這不是理想的方法,您應該集中精力糾正表格設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM