从选择到MySQL中的更新
我希望你能帮助我,我有一个小问题,但我不知道如何解决它,基本上我想更新所谓的duplicatedusernameid,并将其更新到用户数据库中。这是我的密码:从选择到MySQL中的更新,mysql,duplicates,Mysql,Duplicates,我希望你能帮助我,我有一个小问题,但我不知道如何解决它,基本上我想更新所谓的duplicatedusernameid,并将其更新到用户数据库中。这是我的密码: UPDATE users SET duplicatedusernameid = (SELECT CONCAT(first_name,middle_name,last_name) ,COUNT(*)-1 AS duplicatedusernameid HAVING COUNT(*) > 1) WHERE id = 1 这是一个有效的
UPDATE users SET duplicatedusernameid = (SELECT CONCAT(first_name,middle_name,last_name)
,COUNT(*)-1 AS duplicatedusernameid HAVING COUNT(*) > 1) WHERE id = 1
这是一个有效的选择函数,但是我想要更新,而不是选择,就像上面的一样,但是这个函数不起作用。以下是选择代码:
SELECT CONCAT(first_name,middle_name,last_name),COUNT(*)-1 AS duplicatedusernameid
FROM users HAVING COUNT(*) > 1
因此,基本上我想获取DuplicatedUserName的值并对其进行更新。您可以使用如下SQL语句:
update users a
inner join (
-- get the count for a user
SELECT first_name, middle_name, last_name, COUNT(*)-1 AS duplicatedusernameid
from users
group by first_name, middle_name, last_name
) b
on a.first_name = b.first_name
and a.middle_name = b.middle_name
and a.last_name = b.last_name
set a.duplicatedusernameid = b.duplicatedusernameid
where a.id = 1;
桌子
如果删除where子句,则返回结果
解释
上面的SQL语句将获得每个唯一的名字、中间名和姓氏组合的计数。您可以通过在group by子句下面添加having count*>1来入围
然后,我们根据名字、中间名和姓氏的组合将users表与这个计数相关的表连接起来。只要存在匹配项,就更新users表中检索到的计数
SQLFiddle
定义不起作用。它是做什么的?@David好的,基本上它是做什么的它会得到名字、中间名和姓氏,它会得到重复的名字有多少人有相同的名字,然后我想把它更新到users表中,我们会得到有多少人有相同的名字的值。顺便说一句,上面的系统实际上可以区分,如果用户没有中间名,它将为空,只获取名字和姓氏的值,然后它将检查有多少人有相同的名字。这有意义吗?是要更新所有副本还是只更新特定副本?在SELECT语句中,您没有指定WHERE子句,而在UPDATE语句中,您的WHERE id=1,因此很容易混淆。请正确地重新表述所有这些内容,当您出现错误时,最好在问题中添加错误消息。@AllanVester:这并不能真正描述此代码的失败方式。选择返回什么?如果它不仅仅是一个标量值,那么我不确定该更新真正应该做什么,因为您将尝试使用一组值来更新一个值。这段代码是否有任何更新?有错误吗?WHERE子句能找到您要查找的记录吗?@ThomasG在更新部分,我实际上想使用WHERE id=以及其他一些东西,因为我使用的是Laravel,我可以从users表中获取用户id,只需执行这个简单的命令。其中id=?,[Auth::user->id]
create table users (
id int,
first_name varchar(100),
middle_name varchar(100),
last_name varchar(100),
duplicatedusernameid varchar(100)
);
insert into users (id, first_name, middle_name, last_name) values
(1, 'John', '', 'Smith'),
(2, 'John', '', 'Smith'),
(3, 'Jessie', '', 'Marcus'),
(4, 'Jessie', '', 'Marcus'),
(5, 'Jessie', '', 'Marcus'),
(6, 'Don', '', 'Kassieth');
| id | first_name | middle_name | last_name | duplicatedusernameid |
|----|------------|-------------|-----------|----------------------|
| 1 | John | | Smith | 1 |
| 2 | John | | Smith | 1 |
| 3 | Jessie | | Marcus | 2 |
| 4 | Jessie | | Marcus | 2 |
| 5 | Jessie | | Marcus | 2 |
| 6 | Don | | Kassieth | 0 |
SELECT first_name, middle_name, last_name, COUNT(*)-1 AS duplicatedusernameid
from users
group by first_name, middle_name, last_name