2012-02-13 68 views
2

是否有更改以簡化此數據庫查詢(必須每次請求運行多次)可能使用IN子句或其他內容?數據庫查詢簡化了多行的WHERE子句

SELECT `id` 
FROM `tablename` 
WHERE `columnname1` = "longer-value" OR 
     `columnname2` = "longer-value" OR 
     `columnname3` = "longer-value" OR 
     `columnname4` = "longer-value" OR 
     `columnname5` = "longer-value" OR 
     `columnname6` = "longer-value" OR 
     `columnname7` = "longer-value" OR 
     `columnname8` = "longer-value" OR 
     `columnname9` = "longer-value" OR 
     `columnname10` = "longer-value" 

請注意,此查詢檢查10個不同列的值。

+4

你忘了規範化數據庫。 – 2012-02-13 22:10:51

+0

'(每個請求必須運行多次)'這是一面紅旗。你能減少查詢的數量嗎?也許有'JOIN'? – 2012-02-13 22:12:59

+1

有沒有很好的理由,你不能把它分解成兩個規格化的表格?在全表掃描比標準查找快得多的情況下,我一直處於這種情況......但很少見。 – gahooa 2012-02-13 22:14:00

回答

5

我其實在此之前做......

WHERE "longer-value" IN (`rowname1`, `rowname2`, ... , `rownameN`) 
+0

我認爲你錯了,你確定你能做到嗎?你有沒有注意到rowname是不同的列。 – 2012-02-13 22:15:26

+0

@DorCohen:那有什麼問題 – 2012-02-13 22:19:59

+0

@DorCohen:它與IN中的字段或值一起工作......它是一堆'a = 10或b = 10或c = 10'的語法糖。 – gahooa 2012-02-13 22:55:46