2012-02-13 59 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