2016-12-16 42 views
1

我有一個數據庫委員會和一個用戶。SQL何處合併值

委員會:

CREATE TABLE `committee` (
`com_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`duties` varchar(64) COLLATE utf8_unicode_ci NOT NULL, 
`duties_de` varchar(256) COLLATE utf8_unicode_ci NOT NULL, 
`duties_fr` varchar(256) COLLATE utf8_unicode_ci NOT NULL, 
`users_IDFS` int(10) unsigned DEFAULT NULL, 
PRIMARY KEY (`com_ID`), 
KEY `users_IDFS` (`users_IDFS`), 
CONSTRAINT `committee_ibfk_1` FOREIGN KEY (`users_IDFS`) REFERENCES `users` (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

和用戶

CREATE TABLE `users` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`rank` tinyint(2) NOT NULL, 
`name` varchar(32) NOT NULL, 
`first_name` varchar(32) DEFAULT NULL, 
`email` varchar(64) NOT NULL, 
`passwd` varchar(128) NOT NULL, 
`street` varchar(128) DEFAULT NULL, 
`location` varchar(128) DEFAULT NULL, 
`plz` varchar(8) DEFAULT NULL, 
`m_number` varchar(32) DEFAULT NULL, 
PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 

現在我的問題是,我想在committee表,其中名稱更新user例如「Hans Meier」== users.first_name和users.name

有沒有一種方法可以在SQL語句中分解「Hans Meier」,或者我可以將users.first_name和users.name組合到一個字符串中然後比較呢?

回答

2

您可以執行update-join

update committee c 
join `users` u on c.name = u.name or c.name like CONCAT(u.first_name, '%') 
set c.col = u.val; 
+0

我認爲那樣會最好,明天早上我會檢查一下 非常感謝 – Damon

0

您可以使用類似這樣

SUBSTRING('Hans Meier',0,LOCATE(" ", "Hans Meier")) 

對於名字

SUBSTRING('Hans Meier',LOCATE(" ", "Hans Meier") + 1)

對於姓氏

1

將兩個字符串合併爲一個的方法是使用concat命令。 http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat

正如你所說,你可以做的就是結合user.first_name和user.name並進行比較。

select if('ab'=concat('a','b'),1,0); 

enter image description here

你應該做的是一樣的東西

select if('Hans Meier'= concat(user.first_name, ' ', user.name, <true clause>, <false clause>); 

不要忘了空間,否則就會失敗。

select if('a b'=concat('a','b'),1,0); 

enter image description here

更新句話應該是這個樣子

update committee 
set user = <name of user> 
where(user.name = concat(user.first_name, ' ', user.name); 

希望這有助於!

0

我會建議您修改您的數據模型。如果您要使用一張表中的信息更新另一張表,則最好以相同的方式存儲該信息。您要求使用全名進行更新,但我認爲用戶需要進入的唯一字段是INT。在這種情況下,您將存儲ID而不是名稱。

此外,委員會似乎不大可能只有一名成員。可能需要一個存儲委員ID和成員用戶標識的委員會議表。它是一個SQL反模式,可將多個IDS存儲在一列中或多次存儲相同的委員會記錄。

我看到您的模型也存在其他問題。委員會通常有名字。我沒有看到那個領域。添加名稱時,還要在其上添加唯一索引。如果有與委員會有關的職責,那麼應該有一個ComitteeDuty表,因爲否則你將有同一個委員會的多個記錄,或者必須在一個字段中連接,這兩個都是嚴重的數據庫設計錯誤。在重新設計這個設計之前,你真的需要閱讀標準化。