2

これは本当に基本的なことかもしれませんが、文字が同じで大文字が異なる文字列を検索する SQL クエリを作成する方法が思い浮かびません。

私が取り組んでいるコンテキストは、Rails 3.2 アプリです。Name 属性を持つ単純な Tag モデルがあります。大文字と小文字を区別せずに値を保存しないこのモデルのデータを継承したため、「ツリー」などを入力するユーザーもいれば、「ツリー」を入力するユーザーもいます。

したがって、クエリを実行してこれらすべてのペアを検索し、それらをマージできるようにしたいと思います。

これまでに考えられる唯一のことは、それらすべてをループして一致する値をチェックする rake タスクを作成することです...次のようなものです:

pairs = []
Tag.all.each do |t|
  other = Tag.where( 'name LIKE ?', t.name )
  pairs << [t, other] if other
end

ただし、上記が機能するかどうか、またはパフォーマンス的に意味があるかどうかはわかりません。これらの一致するペアを見つける SQL クエリを作成するより良い方法はありますか?

4

3 に答える 3

0

私はSQLが得意ではありませんが、これを少し調べたところ、COLLATE句を使用すると、SQLで文字列操作の大文字と小文字を区別できることがわかりました。(通常、個別の操作を選択すると、大文字と小文字が区別されません。)

だから多分あなたは試すことができます:

select distinct (name) COLLATE sql_latin1_general_cp1_cs_as
    FROM (
    ... blah blah blah

照合に関するドキュメントは次のとおりです。 http://dev.mysql.com/doc/refman/5.0/en/charset-collat​​e.html

(あなたがmysqlを使用していると仮定すると)

または、照合を介して大文字と小文字を区別するようにデータベースを再構成することもできます。次に、現在のクエリが変更されずに機能する可能性があります

(管理者権限があり、再構成できることが前提です)

于 2012-11-03T01:07:22.127 に答える