2010-03-23 174 views
4

我運行SQL查詢的MySQL服務器用語... IN子句

... 
where name in ("term1","term2","term3") 

,我想每一個詞從一個文本文件中獲得的術語列表線。我怎樣才能做到這一點?

如果這個術語列表會變大嗎?例如10K。這會有效嗎?或者我應該使用其他方法?可能是臨時表並加入?數據庫是隻讀的。

+0

你有PHP或Perl嗎?兩者都可以很好地工作,並且有一點嵌套循環瘋狂 – CheeseConQueso 2010-03-23 22:48:06

+0

Perl會很好。你會展示一段代碼作爲答案嗎? – yuk 2010-03-23 23:44:52

回答

2

我不是那麼熟悉MySQL,但我看到這樣的事情,你可以在一個表,你在你的問題建議加載一個文本文件: -

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, column2, column3); 

,然後使用連接獲取數據。

詳情here

+0

我必須先創建t1表,對吧?如果數據庫是隻讀的,我可以這樣做嗎? – yuk 2010-03-23 16:23:10

+0

在SQL Server中,您可以在不同的數據庫中創建表,並使用DatabaseName..TableName表示法從另一個(只讀)數據庫中讀取數據。我不太確定這是否可以在MySQL中使用。應該也可以在那裏。 – 2010-03-23 17:13:50

+0

不幸的是,這個公共的MySQL服務器沒有授予創建臨時表或數據庫的權限。 – yuk 2010-03-23 23:46:59

0

我認爲你最好的選擇可能是把它讀入專門用於這個查找的臨時表/表

通過這種方式,您可以爲表格編制索引,並使用內部連接/在子查詢中的位置。

1

通常,使用WHERE ... IN語句在幾百個/千項之後變得非常緩慢。另外,如果表是隻讀的,那麼你將無法添加索引以使其更快,所以,就像我說的那樣,我會建議一個帶有連接的臨時表。