所以,這裏基本上是這個問題:
對於初學者,我不是要求任何人做我的功課,而只是給我一個正確的方向推動。
我有2個表格,包含練習的名稱和聯繫人數據
我們稱這些表爲people
和contact
。
爲people
創建表:
MySQL CONCAT多個獨特的行
CREATE TABLE`people`(
`id` INT(10)無符號NOT NULL AUTO_INCREMENT,
`fname` TINYTEXT,
`mname` TINYTEXT,
`lname` TINYTEXT,
PRIMARY KEY(`id`)
)ENGINE = InnoDB的默認字符集= LATIN1
爲contact
創建表:
CREATE TABLE`contact`(
`id` INT(10)無符號NOT NULL AUTO_INCREMENT,
`person_id` INT(10)無符號NOT NULL DEFAULT「0 」,
`tel_home` TINYTEXT,
`tel_work` TINYTEXT,
`tel_mob` TINYTEXT,
`email`文本,
PRIMARY KEY(`id`,`person_id`),
KEY`fk_contact`(`person_id`),
約束`fk_contact`外鍵(`person_id`)參考`people`(`id`)
)ENGINE = InnoDB的默認字符集= 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 | name | tel_home | tel_work | tel_mob | email | +----+----------+---------------------+----------+---------+---------------------+ | 1 | Jane Doe | 1500 (xxx-xxx 1500) | NULL | NULL | [email protected] | | 2 | John Doe | 1502 (xxx-xxx 1502) | NULL | NULL | NULL | | 2 | John Doe | NULL | NULL | NULL | [email protected] | +----+----------+---------------------+----------+---------+---------------------+
該視圖的問題在於第1行和第2行(從0開始計數)可能已被分組到單個行。 儘管這種「不美觀」的結果是由於數據損壞造成的,但它很可能會出現在多節點數據庫環境中。
有針對性的結果會是這樣的
+----+----------+---------------------+----------+---------+---------------------+ | id | name | tel_home | tel_work | tel_mob | email | +----+----------+---------------------+----------+---------+---------------------+ | 1 | Jane Doe | 1500 (xxx-xxx 1500) | NULL | NULL | [email protected] | | 2 | John Doe | 1502 (xxx-xxx 1502) | NULL | NULL | [email protected] | +----+----------+---------------------+----------+---------+---------------------+
,因爲具有相同id
和name
行時仍表現出的有效數據進行分組。
附註:
innodb_version:5.5.32
版本:5.5.32-0ubuntu-.12.04。1日誌
version_compile_os:debian_linux-GNU
如果兩個或兩個以上「組」中的記錄包含衝突數據? – eggyal
非NULL值不應與其他非NULL值組合在一起 – finwo