MySQLで苗字(姓)と名前(名)のカラムを結合させ検索する方法
2026/10/02
MySQLで名字(姓)と名前(名)をそれぞれ別カラムに格納しているデータベースがあり、そこから「フルネームで完全一致検索」もしくは「名字 or 名前でのあいまい検索」を行いたかった。調べたところCONCATを用いることで各種検索が行えるみたい。以下に対応方法をメモ。
テーブル構造とデータ内容
mysql> SHOW COLUMNS FROM `test_table`; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | last_name | varchar(255) | NO | | NULL | | | first_name | varchar(255) | NO | | NULL | | +------------+--------------+------+-----+---------+----------------+ mysql> SELECT * FROM `test_table`; +----+-----------+------------+ | id | last_name | first_name | +----+-----------+------------+ | 1 | 山田 | 太郎 | | 2 | 鈴木 | 次郎 | | 3 | 佐々木 | 三郎 | +----+-----------+------------+
対応方法
フルネームでの完全一致検索
SELECT * FROM `test_table` WHERE CONCAT(`last_name`, `first_name`) = '山田太郎'; +----+-----------+------------+ | id | last_name | first_name | +----+-----------+------------+ | 1 | 山田 | 太郎 | +----+-----------+------------+
名字 or 名前でのあいまい検索
SELECT * FROM `test_table` WHERE CONCAT(`last_name`, `first_name`) LIKE '%太郎%'; +----+-----------+------------+ | id | last_name | first_name | +----+-----------+------------+ | 1 | 山田 | 太郎 | +----+-----------+------------+
リファレンス
CONCAT
https://dev.mysql.com/doc/refman/8.0/ja/string-functions.html#function_concat
関連記事
-
-
MySQLで指定したカラムの最頻値を抽出する方法
MySQLで指定したカラムの最頻値(全データの中で最も多く出現する値)を抽出した ...
-
-
PHPでmysqli関数使用時のプリペアドステートメントの利用方法
PHPでMySQLを扱う際はmysqli関数を、エスケープの際はreal_esc ...
-
-
MySQLで一連の処理を関数のように実行できるストアドプロシージャの設定と利用方法
MySQL関連のサイトを見ていた際にストアドプロシージャが云々というページがあっ ...
-
-
MySQLでホスト指定しても正常に接続できない場合
MySQL自体は動いており、ユーザーも登録されているのに、ホスト名を指定しても正 ...
-
-
エックスサーバーでMySQLのサイズに注意
エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...