質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

2回答

1880閲覧

複数のテーブルの複数の列のデータのあいまい検索

lifeguardian

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/08/15 05:33

現在自身で作っているサイトについてサイト内検索を実装しようと考えております。
その際にMysql内のデータを検索できるものをと考えており、現在試行錯誤している最中です。

そこで、データベースの複数のテーブルの複数の列を一斉にあいまい検索し、データを表示させたいのですが、どのようにすればいいのか分からず行き詰っております。

例)
DROP DATABASE IF EXISTS student;

CREATE DATABASE student;

USE student;

CREATE TABLE class1_1(
student_number INT PRIMARY KEY NOT NULL AUTO_INCREMENT comment '生徒番号',
student_name VARCHAR(16) NOT NULL comment '生徒名',
student_kana VARCHAR(16) NOT NULL comment '生徒名仮名',
student_birthday DATE NOT NULL) comment '生年月日';

CREATE TABLE class1_2(
student_number INT PRIMARY KEY NOT NULL AUTO_INCREMENT comment '生徒番号',
student_name VARCHAR(16) NOT NULL comment '生徒名',
student_kana VARCHAR(16) NOT NULL comment '生徒名仮名',
student_birthday DATE NOT NULL) comment '生年月日';

CREATE TABLE class2_1(
student_number INT PRIMARY KEY NOT NULL AUTO_INCREMENT comment '生徒番号',
student_name VARCHAR(16) NOT NULL comment '生徒名',
student_kana VARCHAR(16) NOT NULL comment '生徒名仮名',
student_birthday DATE NOT NULL) comment '生年月日';

INSERT INTO class1_1(student_number,student_name,student_kana,student_birthday)VALUES
(1,'青井 太郎','あおい たろう','19990212'),
(2,'青井 次郎','あおい じろう','19990212'),
(3,'加藤 功治','かとう こうじ','19980408'),
(4,'佐藤 幸子','さとう こうこ','19980614'),
(5,'高橋 裕子','たかはし ゆうこ','19980428');

INSERT INTO class1_2(student_number,student_name,student_kana,student_birthday)VALUES
(1,'赤松 武','あかまつ たけし','19990125'),
(2,'伊藤 勇太郎','いとう ゆうたろう','19990614'),
(3,'鈴木 芳次','すずき よしつぐ','19980529'),
(4,'永沢 一貴','ながさわ いっき','19980808'),
(5,'花沢 頼子','はなざわ よりこ','19980815');

INSERT INTO class2_1(student_number,student_name,student_kana,student_birthday)VALUES
(1,'佐藤 巴','さとう ともえ','19990125'),
(2,'下田 あずみ','しもだ あずみ','19990614'),
(3,'曽我 いるか','そが いるか','19980529'),
(4,'津川 正輝','つがわ まさき','19980808'),
(5,'利根 川子','とね かわこ','19980815');

という複数のテーブルのstudent_name,student_kanaの列を一斉にあいまい検索したいです。

またstudent_nameとstudent_kanaであいまい検索した際にどちらもヒットするデータの場合重複もしないようにしたいと思っています。

初歩的な知識なのかもしれないのですがいろいろ調べてみても分からず困っております。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

という複数のテーブルのstudent_name,student_kanaの列を一斉にあいまい検索したいです。

のは可能かどうかというと、可能ではありますが、テーブル設計を変更する方が一般的な方法かと思います。

クラス毎にテーブルを用意するのではなく、一つのテーブルのフィールドにクラスの情報を作るという形ですね。

SQL

1CREATE TABLE student( 2number INT PRIMARY KEY NOT NULL AUTO_INCREMENT comment '生徒番号', 3name VARCHAR(16) NOT NULL comment '生徒名', 4kana VARCHAR(16) NOT NULL comment '生徒名仮名', 5birthday DATE NOT NULL) comment '生年月日', 6class VARCHAR(16) NOT NULL comment '所属クラス'; 7

という感じにすれば

という複数のテーブルのstudent_name,student_kanaの列を一斉にあいまい検索したいです。

について、はLIKEによる部分一致をORで連結すれば検索できるようになります。

投稿2016/08/15 05:48

tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

tanatさんの回答がベストだとおもいますが
今のテーブル構成でやりたいならば
UNION
使えばいいと思います。
重複はUNION ALLだと重複削除しないので
単なるUNIONで。

投稿2017/06/24 05:45

cutedog

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問