Böyle bir SQL deyimi kullanabilirsiniz:
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;
Tablo
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');
Sonuçları (eğer kaldırırsanız nerede fıkra)
| 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 |
Açıklama
SELECT first_name, middle_name, last_name, COUNT(*)-1 AS duplicatedusernameid
from users
group by first_name, middle_name, last_name
yukarıdaki SQL deyimi her benzersiz, ilk, orta ve soyadı kombinasyonu için sayım alacak. having count(*) > 1
'un group by
maddesinin altına ekleyerek bunu kısa listeye alabilirsiniz.
Daha sonra, kullanıcı tablosuna ilk, orta ve soyadı kombinasyonuna dayanan bu sayımla ilgili tablo ile katılıyoruz. Bir eşleşme varsa, kullanıcı tablosundaki alınan sayıyı güncelleyin.
SQLFiddle
http://sqlfiddle.com/#!9/c43ea/1
tanımla "çalışmıyor". Bu ne işe yarıyor? – David
@David Okay, temel olarak ne yapar, ilk, orta ve soyadı alır ve çiftleri (kaç kişi aynı ada sahip) alırsa, o zaman bunu kullanıcı tablosuna güncellemek isterim. aynı adada kaç tane var. BTW yukarıdaki sistem aslında ayırt edebilir ve kullanıcı dos bir orta isim yoksa, sadece boş olacak ve sadece ilk isim ve soyadı değeri olsun ve daha sonra aynı ada sahip kaç tane kontrol edecektir. bu mantıklı mı? –
UPDATE ** tüm ** kopyalarını veya sadece ** belirli bir ** olmasını ister misiniz? "SELECT" deyiminde "WHERE" yan tümcesi belirtmezsiniz ve "UPDATE" deyiminizde "WHERE id = 1" ifadesine sahip olursunuz, bu yüzden kafa karıştırıcıdır. Tüm bunları doğru şekilde yeniden yazınız, lütfen ve bir hata olduğunda, bu soruya hata mesajını eklemek her zaman iyi bir fikirdir. –