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

あなたのデータベースを正規化するのを忘れ...この前行っています。 –

+0

'(リクエストごとに何度も実行する必要があります)'これは赤い旗です。あなたはクエリの数を減らすことができますか?おそらく 'JOIN'ですか? –

+1

これを2つの正規化されたテーブルに分割できない理由はありますか?私は前のような状況にあった前に完全なテーブルスキャンは、正規化されたルックアップよりもはるかに高速だった...しかし、それはまれです。 – gahooa

答えて

5

私は実際に

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

私はあなたが間違っていると思います、本当にできますか?あなたはrownameがdifferntの列であることに気付きましたか? –

+0

@DorCohen:それで何が悪いのですか? –

+0

@DorCohen:それはINのフィールドや値と連動しています。「a = 10 OR b = 10 OR c = 10'」の構文砂糖です。 – gahooa

関連する問題