我有一个数据库委员会和一个用户委员会。
委员会:
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,其中的名称例如“汉斯·梅尔”== users.first_name和users.name
有没有一种方法可以在SQL语句中拆分"Hans Meier“,或者我可以将users.first_name和users.name组合成一个字符串,然后进行比较?
发布于 2016-12-16 22:47:34
您可以执行如下所示的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;发布于 2016-12-16 22:49:18
将两个字符串合并为一个字符串的方法是使用concat命令。http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function
您可以做的是,如您所说,将user.first_name和user.name结合起来并进行比较。
select if('ab'=concat('a','b'),1,0);

你应该这样做
select if('Hans Meier'= concat(user.first_name, ' ', user.name, <true clause>, <false clause>);不要忘记空间,否则它会失败。
select if('a b'=concat('a','b'),1,0);

update语句应如下所示
update committee
set user = <name of user>
where(user.name = concat(user.first_name, ' ', user.name);希望这能有所帮助!
发布于 2016-12-16 22:45:02
您可以使用下面这样的内容
SUBSTRING('Hans Meier',0,LOCATE(" ", "Hans Meier"))对于名字
和SUBSTRING('Hans Meier',LOCATE(" ", "Hans Meier") + 1)
姓氏
https://stackoverflow.com/questions/41186720
复制相似问题