CREATE TABLE bar LIKE foo;
INSERT INTO bar (id,user,first,last)
(SELECT f.id,CONCAT(SUBSTRING(f.first,1,1),f.last,
(SELECT COUNT(*) FROM foo f2
WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)
AND f2.last = f.last AND f2.id <= f.id
)),f.first,f.last from foo f);
DROP TABLE foo;
RENAME TABLE bar TO foo;
này dựa trên một khóa chính id
, vì vậy cho mỗi bản ghi chèn vào bar
, chúng tôi chỉ tính trùng được tìm thấy trong foo
với id
ít hơn bar.id
.
foo Given:
select * from foo;
+----+------+--------+--------+
| id | user | first | last |
+----+------+--------+--------+
| 1 | aaa | Roger | Hill |
| 2 | bbb | Sally | Road |
| 3 | ccc | Fred | Mount |
| 4 | ddd | Darren | Meadow |
| 5 | eee | Sharon | Road |
+----+------+--------+--------+
Trên đây INSERT
s vào bar
, kết quả là:
select * from bar;
+----+----------+--------+--------+
| id | user | first | last |
+----+----------+--------+--------+
| 1 | RHill1 | Roger | Hill |
| 2 | SRoad1 | Sally | Road |
| 3 | FMount1 | Fred | Mount |
| 4 | DMeadow1 | Darren | Meadow |
| 5 | SRoad2 | Sharon | Road |
+----+----------+--------+--------+
Để loại bỏ các "1" từ ngày kết thúc của tên người dùng,
INSERT INTO bar (id,user,first,last)
(SELECT f3.id,
CONCAT(
SUBSTRING(f3.first,1,1),
f3.last,
CASE f3.cnt WHEN 1 THEN '' ELSE f3.cnt END),
f3.first,
f3.last
FROM (
SELECT
f.id,
f.first,
f.last,
(
SELECT COUNT(*)
FROM foo f2
WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)
AND f2.last = f.last AND f2.id <= f.id
) as cnt
FROM foo f) f3)
thanh gì? tại sao có dấu ngoặc kép ở cuối? quan tâm để giải thích điều này một chút? – mpen
@Mark: 'bar' là một bảng trống như' foo'. Sau khi chèn các bản ghi vào 'bar', bạn có thể thả' foo' và đổi tên 'bar' ->' foo'. Trích dẫn ba là một tạo phẩm của Python, nơi tôi đã kiểm tra mã. – unutbu
Ah. Tôi chỉ muốn cập nhật bảng người dùng, nhưng tôi đoán tôi có thể dễ dàng chuyển nó trở lại. Đó là khá mát mẻ. Tôi cũng sẽ để lại số nếu nó là "1", nhưng một lần nữa, điều đó phải dễ dàng để làm. Tốt đẹp! Cảm ơn rất nhiều! ** Chỉnh sửa: ** Giống như bình luận của bạn giải thích. – mpen