おそらく無効な識別子エラーが発生しています。クエリーが解析され実行される順序のため、定義されているクエリーの同じレベルのカラムエイリアス(を除く)を参照することはできません。
あなたはCTEまたはインライン・ビュー(サブクエリ)を使用することができます
SELECT name
FROM (
SELECT CONCAT(CONCAT(name1,name2),name3) as name
FROM table1
)
WHERE name LIKE '%{$qs}%'
いくつかのダミーデータで:
create table table1 (name1 varchar2(10), name2 varchar2(10), name3 varchar2(10));
insert into table1 (name1, name2, name3) values ('john', 'mega', 'rambo');
insert into table1 (name1, name2, name3) values ('john', 'master', 'travolta');
insert into table1 (name1, name2, name3) values ('john', 'super', 'connor');
そのクエリを - rambo
に置き換え{$qs}
で - 取得:
NAME
------------------------------
johnmegarambo
ご覧のとおり、concat
は自動化されませんあなたは連結演算子を簡単に見つけるかもしれないのでICALLY、空白を追加します。
SELECT name
FROM (
SELECT name1 ||' '|| name2 ||' '|| name3 as name
FROM table1
)
WHERE name LIKE '%{$qs}%'
NAME
--------------------------------
john mega rambo
しかし、あなたはあなたの代わりに各列をチェックしたい場合がありますより多くの完全一致を探しているなら:
SELECT name1 ||' '|| name2 ||' '|| name3 as name
FROM table1
WHERE name1 = '{$qs}'
OR name2 = '{$qs}'
OR name3 = '{$qs}'
たぶんあなたが欲しいです部分的な一致を検索する柔軟性。
デフォルトでは、検索文字列の大文字と完全に一致する値のみを検索できるため、データではRAMBO
を検索すると一致するものは見つかりません。それがあなたのために問題なら、その周りにはいくつかの方法があります。
にORACLE
:私はOracleとMySQLの両方のソリューション
MySQLを投稿します。コードがどのように動作しないか、どのようなエラーがスローされるかなどの説明は非常に役に立ちます。あなたが投稿したコードには構文エラーがありますが、それを確認するエラーメッセージは表示されません。あなたが転写エラーを起こしたかどうかを知ることは本当に難しいです。 –
"それは動作しません"一般的にあまり有用ではありません、実際のエラーや誤った動作を提供してください。あなたのテーブルには 'name'カラムはありません。 3つの列のいずれかに存在する値を検索したいと思うようですが、最後の段落が意味することはわかりません。列の組み合わせが示唆されていますか? –
あなたはそれについて正しいです、私は質問を投稿する次回考慮に入れます。ありがとうございます! – brunobliss