64 の異なるフィールドで構成されるテーブルがあります。単一のキーワードで検索すると、結果はどのフィールドのキーワードとも一致するはずです。いくつかの提案をしてください。
8 に答える
複数の条件で where を使用できます OR
お気に入り
where
name = 'expected'
OR rate ='expected'
OR country ='expected'
クエリが単純だが長いことを回避する方法がわかりません。
SET @term = "Somesearch";
SELECT id, title FROM sometable WHERE
col1 LIKE '%@term%' OR
col2 LIKE '%@term%' OR
col3 LIKE '%@term%' ...;
MySQL 変数を使用する代わりに、言語固有の変数を使用することもできますが、例として、MySQL 自体に固執することにしました。
「...」は、他の 61 列/フィールドを配置する場所です。
別の可能性は、FOR XML を使用してすべての列を単一のフィールドに出力することです...次のように:
SELECT c.*
FROM (
SELECT a.*
,( SELECT *
FROM table_to_search b
WHERE a.KeyField = b.KeyField
FOR XML RAW) AS `Full_Text_Record`
FROM table_to_search a) c
WHERE c.`Full_Text_Record` LIKE '%Search_string%'
特に大きなテーブルの場合、実行に時間がかかる場合がありますが、特定のテーブルにその文字列が存在するかどうかを総当たりで調べる必要があります。
最も簡単な解決策は、 multiple を使用することORs
です。
select * from TAB where col1 like "%VAR%" OR col2 like "%VAR%" OR......col64 like "%VAR%";
like
要件に従ってorを使用できます=
が、新しい列を追加するたびにクエリを変更する必要があります。
SQLDump for that table
別の方法として、そのファイルを取得することもできsearch
ます。
いくつかのグーグルで、
このプロジェクトが役立つかどうかを確認してください - http://code.google.com/p/anywhereindb/。あらゆる分野を探求し、多くの人から称賛される。
information_schema
表の情報を使用してみてください。テーブル内のすべての列を探します。ここで、この情報を使用してクエリを作成してみてください。
この SQL Server 構文を MySQL に変換できる場合
WHERE
name = @keyword OR
country = @keyword OR
department = @keyword OR
@keyword IS NULL -- match all when search text is empty
テーブル内のすべての列に対してクエリを生成する 1 つのクエリを作成できます。以下の例では、スキーマ (「所有者」) は「DEV_USER」です。64 個のフィールドを持つテーブルは「CUSTOMER_INFO」と呼ばれます。検索の基準は、「VT」の値を持つ任意の列です。
select 'SELECT ' || COLUMN_NAME || ' FROM CUSTOMER_INFO
WHERE ' || COLUMN_NAME || q'# LIKE '%VT%';#'
FROM ALL_TAB_COLS
WHERE OWNER = 'DEV_USER'
AND TABLE_NAME = 'CUSTOMER_INFO';
この 1 つのクエリで、フィールドごとにクエリが生成されます。上記を実行した結果は次のようになります。
SELECT ADDRESS_1 FROM CUSTOMER_INFO
WHERE ADDRESS_1 LIKE '%VT%';
SELECT ADDRESS_2 FROM CUSTOMER_INFO
WHERE ADDRESS_2 LIKE '%VT%';
SELECT CITY FROM CUSTOMER_ADDRESSES_QASB
WHERE CITY LIKE '%VT%';
SELECT STATE_PROVINCE FROM CUSTOMER_INFO
WHERE STATE_PROVINCE LIKE '%VT%';
SELECT ZIP_POSTAL_CODE FROM CUSTOMER_INFO
WHERE ZIP_POSTAL_CODE LIKE '%VT%';
WHERE LATITUDE LIKE '%VT%';
... and so on for each column in the table
次に、最初のクエリから生成されたクエリを別のタブに貼り付けて実行します。
それが役立つことを願っています。:-)