2009-12-05 66 views
1

我想要查詢出現在不同表中的字段中的一個表的名稱列表。查詢出現在不同表中的字段中的名稱列表

實施例:

table1.title>老虎伍茲作弊老虎伍茲崩潰,布拉德皮特是大,麥當娜採用,布拉德皮特使一個電影

table2.names>老虎伍茲,布拉德皮特,麥當娜

所以那些是兩個表和值。我想編寫一個查詢來計算table2.names中哪些名字出現在table1.name中最經常出現的名稱

有人建議使用內部連接,但我無法讓它工作......我感謝幫助!謝謝。

+0

@Mike,你可以指定你的平臺,以便利用SQL實現中的特定功能嗎?也許你更喜歡嚴格的ANSI SQL? – 2009-12-05 20:38:53

+0

MySQL。我是一個初學者..那是你在找什麼? – Mike 2009-12-05 20:42:23

+0

我只是試圖編寫SQL查詢來產生這個結果。 – Mike 2009-12-05 20:42:55

回答

2

用途:

SELECT a.names, 
     COUNT(b.titles) AS num 
    FROM TABLE_2 a 
    JOIN TABLE_1 b ON INSTR(b.title, a.names) > 0 
GROUP BY a.names 
ORDER BY num DESC 

請參閱有關INSTR()的文檔 - 檢查大於0的值意味着名稱出現在標題中,否則將爲零。

AS num是列別名,您可以在ORDER BY中引用該列別名以ASCending或DESCending順序進行排序。

+0

WOW。這工作!非常感謝! – Mike 2009-12-05 21:05:11

1

您確實想要使用連接,但您的連接條件將是模式匹配,而不是平等。這是假設你想尋找確切的名稱匹配(即包括在table1.title列中的字符串中的某個地方/在任何地方,而不是部分匹配來自table2.names精確值):

select t2.names, count(*) 
from  table2 t2 
join  table1 t1 
on  t1.title like('%' + t2.names + '%') 
group by t2.names 
order by count(*) desc; 
+0

這是一個很大的幫助。如何將此結果插入到新表中..不知道如何通過結果對組進行插入操作。 – Mike 2009-12-05 23:15:52

+0

只需在select上面添加一個標準插入子句,那很簡單。插入子句會看起來像:insert(colA,colB,...) – chadhoc 2009-12-06 00:24:29