2016-11-25 58 views
0
行的值

所以我有2個表:的Oracle SQL選擇在那裏同樣

節日表:與列NAME

--------------------- 
NAME 
--------------------- 
1. ultra music 
2. coachella 

和Querydata與柱:QUERY

---------------------- 
QUERY 
---------------------- 
1. xyz 
2. coachella festival 
3. abc 
4. ultra music festival 

所以我想統計querydata表中每個節日的所有事件。

我的意思是我可以通過Querydata表並搜索它自己的每個節日名稱,但我真的很想找到方便的方法來做到這一點。

SELECT QUERY FROM QUERYDATA 
WHERE QUERY LIKE '%coachella%' 
AND QUERY LIKE '%festival%' 

請幫助我我真的被困在這一個! 乾杯

+0

SQL Server或Oracle?選一個。你應該檢查[JOIN](http://www.w3schools.com/sql/sql_join.asp) –

+0

我刪除了不兼容的標籤。請標記您真正使用的數據庫。 –

+0

那麼,看起來你正在同一個字符串中的某個地方尋找「節日」這個詞?那麼是否也有可能擁有像「超音樂後勤」或「coachella預算」這樣的價值,並且你不想要這些價值?那麼 - 小寫與大寫是什麼關係呢?你可以同時舉辦'超音樂節'和'超音樂節'嗎?節日的名字總是在字符串的開頭,或者你也可能有'2016超音樂節'? (如果它始終處於開始狀態,那麼可以使用'LIKE'來執行,這樣執行速度會快得多。) – mathguy

回答

2

你可以做這樣的事情:

select f.name, count(*) 
from querydata qd join 
    festivals f 
    on qd.query like '%' || f.name || '%' 
group by f.name; 

注:這假設名稱沒有重疊。 「聖誕節」和「聖誕節前夕」可能會導致意想不到的重複。

+0

您有'q'作爲別名,但在'on'條件下使用'qd' – Kacper

+0

@Kacper。 。 。謝謝。 –

+0

我真的不知道爲什麼,但我只是沒有得到任何結果 – dummker

0

使用like在其他答覆中提到或instr象下面這樣:

select t1.name, count(*) 
from festival t1 inner join Querydata t2 on instr(t2.query, t1.name) > 0 
    group by t1.name;