つまり、基本的な問題は次のとおりです。
まず、私は誰かに宿題をするように頼んでいるのではなく、正しい方向に向けて微調整をしてもらいたいだけです。
練習用の名前と連絡先データを含む 2 つのテーブルがあります。これらのテーブルを と と
呼びましょう。
のテーブルを作成:people
contact
people
CREATE TABLE `people` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fname` tinytext,
`mname` tinytext,
`lname` tinytext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
のテーブルを作成contact
:
CREATE TABLE `contact` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`person_id` int(10) unsigned NOT NULL DEFAULT '0',
`tel_home` tinytext,
`tel_work` tinytext,
`tel_mob` tinytext,
`email ` text,
PRIMARY KEY (`id`,`person_id`),
KEY `fk_contact` (`person_id`),
CONSTRAINT `fk_contact` FOREIGN KEY (`person_id`) REFERENCES `people` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
各人の連絡先情報を取得するとき、私が使用するクエリは次のとおりです。
SELECT p.id, CONCAT_WS(' ',p.fname,p.mname,p.lname) name, c.tel_home, c.tel_work, c.tel_mob, c.email;
これは、次のような応答のみを作成します。
+----+----------+---------------------+----------+ ------+---------------------+ | | ID | 名前 | tel_home | tel_work | tel_mob | 電子メール | +----+----------+---------------------+----------+ ------+---------------------+ | | 1 | ジェーン ドウ | 1500 (xxx-xxx 1500) | ヌル | ヌル | janedoe@example.com | | | 2 | ジョン・ドウ | 1502 (xxx-xxx 1502) | ヌル | ヌル | ヌル | | | 2 | ジョン・ドウ | ヌル | ヌル | ヌル | johndoe@example.com | +----+----------+---------------------+----------+ ------+---------------------+
このビューの問題は、行 1 と 2 (0 から数えて) が 1 つの行にグループ化される可能性があることです。この「きれいではない」結果はデータの破損によるものですが、マルチノード データベース環境で発生する可能性があります。
目標とする結果は次のようになります
+----+----------+---------------------+----------+ ------+---------------------+ | | ID | 名前 | tel_home | tel_work | tel_mob | 電子メール | +----+----------+---------------------+----------+ ------+---------------------+ | | 1 | ジェーン ドウ | 1500 (xxx-xxx 1500) | ヌル | ヌル | janedoe@example.com | | | 2 | ジョン・ドウ | 1502 (xxx-xxx 1502) | ヌル | ヌル | johndoe@example.com | +----+----------+---------------------+----------+ ------+---------------------+
有効なデータがまだ表示されている場合に、同じid
とを持つ行がグループ化されている場所。
補足:
innodb_version: 5.5.32
バージョン: 5.5.32-0ubuntu-.12.04.1-log
version_compile_os: debian_linux-gnuname