Bạn có một sinh viên bảng với
6, UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
7 và UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
8 như thế này, trong đó UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
6 là khóa chính:UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
1 | 10 | 9 |
2 | 8 | 3 |
3 | 10 | 6 |
4 | 4 | 8 |
Và đây là bảng dữ liệu mới mà bạn muốn cập nhật lên:
1 | 5 | 8 |
2 | 10 | 8 |
3 | 8 | 3 |
4 | 10 | 7 |
Và đây là bảng dữ liệu mới mà bạn muốn cập nhật lên:
Có một vài cách để làm điều đó.
UPDATE students SET score1 = 5, score2 = 8 WHERE id = 1;
UPDATE students SET score1 = 10, score2 = 8 WHERE id = 2;
UPDATE students SET score1 = 8, score2 = 3 WHERE id = 3;
UPDATE students SET score1 = 10, score2 = 7 WHERE id = 4;
1. Bạn có thể viết nhiều truy vấn cập nhật như thế này và chạy tất cả chúng cùng một lúc:
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
2. Hoặc bạn có thể cập nhật với câu lệnh tham gia:
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
3. Hoặc bạn có thể sử dụng
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
0Cần một công cụ GUI tốt cho MySQL? TablePlus là một công cụ hiện đại, gốc với giao diện người dùng thanh lịch, cho phép bạn quản lý đồng thời nhiều cơ sở dữ liệu như MySQL, PostgreSQL, SQLite, Microsoft SQL Server, và hơn thế nữa.. It’s free anyway!
Tải xuống TablePlus cho Mac. Dù sao thì nó cũng miễn phí! Download TablePlus for Windows.
Không phải trên Mac? Tải xuống bảng cho Windows. Download TablePlus for Linux
Trên Linux? Tải xuống bảng cho Linux Download TablePlus for iOS.
Tôi đang cố gắng hiểu cách cập nhật nhiều hàng với các giá trị khác nhau và tôi không nhận được nó. Giải pháp ở khắp mọi nơi nhưng với tôi nó có vẻ khó hiểu.
Chẳng hạn, ba bản cập nhật thành 1 truy vấn:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Tôi đọc một ví dụ, nhưng tôi thực sự không hiểu làm thế nào để thực hiện truy vấn. I E:
UPDATE table_to_update
SET cod_user= IF[cod_office = '17389551','622057','2913659','6160230']
,date = IF[cod_office = '17389551','12082014']
WHERE ?? IN [??] ;
Tôi không hoàn toàn rõ ràng làm thế nào để thực hiện truy vấn nếu có nhiều điều kiện trong điều kiện ở đâu và trong điều kiện..có ý tưởng?
Siêu bão
4.7585 Huy hiệu vàng21 Huy hiệu bạc33 Huy hiệu đồng5 gold badges21 silver badges33 bronze badges
Hỏi ngày 4 tháng 9 năm 2014 lúc 20:48Sep 4, 2014 at 20:48
franvergara66franvergara66franvergara66
10.3K19 Huy hiệu vàng57 Huy hiệu bạc100 Huy hiệu Đồng19 gold badges57 silver badges100 bronze badges
1
Bạn có thể làm theo cách này:
UPDATE table_users
SET cod_user = [case when user_role = 'student' then '622057'
when user_role = 'assistant' then '2913659'
when user_role = 'admin' then '6160230'
end],
date = '12082014'
WHERE user_role in ['student', 'assistant', 'admin'] AND
cod_office = '17389551';
Tôi không hiểu định dạng ngày của bạn. Ngày nên được lưu trữ trong cơ sở dữ liệu bằng cách sử dụng các loại ngày và thời gian bản địa.
Đã trả lời ngày 4 tháng 9 năm 2014 lúc 20:53Sep 4, 2014 at 20:53
Gordon Linoffgordon LinoffGordon Linoff
1.2M53 Huy hiệu vàng609 Huy hiệu bạc756 Huy hiệu đồng53 gold badges609 silver badges756 bronze badges
16
MySQL cho phép một cách dễ đọc hơn để kết hợp nhiều bản cập nhật vào một truy vấn duy nhất. Điều này dường như phù hợp hơn với kịch bản mà bạn mô tả, dễ đọc hơn nhiều và tránh những điều kiện khó khăn trong nhiều điều kiện.
INSERT INTO table_users [cod_user, date, user_rol, cod_office]
VALUES
['622057', '12082014', 'student', '17389551'],
['2913659', '12082014', 'assistant','17389551'],
['6160230', '12082014', 'admin', '17389551']
ON DUPLICATE KEY UPDATE
cod_user=VALUES[cod_user], date=VALUES[date]
Điều này giả định rằng sự kết hợp
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
1 là khóa chính. Nếu chỉ một trong số này là khóa chính, thì hãy thêm trường khác vào danh sách cập nhật. Nếu cả hai đều không phải là khóa chính [dường như không thể] thì cách tiếp cận này sẽ luôn tạo ra các bản ghi mới - có lẽ không phải là điều mong muốn.Tuy nhiên, cách tiếp cận này làm cho các tuyên bố chuẩn bị dễ dàng hơn để xây dựng và súc tích hơn.
John
12.1k11 Huy hiệu vàng90 Huy hiệu bạc158 Huy hiệu đồng11 gold badges90 silver badges158 bronze badges
Đã trả lời ngày 19 tháng 1 năm 2016 lúc 0:13Jan 19, 2016 at 0:13
18
Bạn có thể sử dụng câu lệnh
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
2 để xử lý nhiều kịch bản nếu/sau đó:UPDATE table_to_update
SET cod_user= CASE WHEN user_rol = 'student' THEN '622057'
WHEN user_rol = 'assistant' THEN '2913659'
WHEN user_rol = 'admin' THEN '6160230'
END
,date = '12082014'
WHERE user_rol IN ['student','assistant','admin']
AND cod_office = '17389551';
Đã trả lời ngày 4 tháng 9 năm 2014 lúc 20:54Sep 4, 2014 at 20:54
Hart Cohart đồngHart CO
33.5K5 Huy hiệu vàng45 Huy hiệu bạc61 Huy hiệu Đồng5 gold badges45 silver badges61 bronze badges
1
UPDATE table_name
SET cod_user =
CASE
WHEN user_rol = 'student' THEN '622057'
WHEN user_rol = 'assistant' THEN '2913659'
WHEN user_rol = 'admin' THEN '6160230'
END, date = '12082014'
WHERE user_rol IN ['student','assistant','admin']
AND cod_office = '17389551';
Saghachi
7279 Huy hiệu bạc18 Huy hiệu Đồng9 silver badges18 bronze badges
Đã trả lời ngày 11 tháng 12 năm 2016 lúc 7:43Dec 11, 2016 at 7:43
Akshay Bhanakshay BhanAkshay Bhan
2053 Huy hiệu bạc12 Huy hiệu Đồng3 silver badges12 bronze badges
Để mở rộng câu trả lời @trevedhek,
Trong trường hợp bản cập nhật phải được thực hiện với các khóa không duy nhất, sẽ cần 4 truy vấn
Lưu ý: Đây không an toàn giao dịch
Điều này có thể được thực hiện bằng cách sử dụng một bảng tạm thời.
Bước 1: Tạo các phím bảng tạm thời và các cột bạn muốn cập nhật
CREATE TEMPORARY TABLE temp_table_users
[
cod_user varchar[50]
, date varchar[50]
, user_rol varchar[50]
, cod_office varchar[50]
] ENGINE=MEMORY
Bước 2: Chèn các giá trị vào bảng temp
Bước 3: Cập nhật bảng ban đầu
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
0Bước 4: Thả bảng nhiệt độ
Đã trả lời ngày 30 tháng 3 năm 2020 lúc 11:45Mar 30, 2020 at 11:45
SabsabSab
4705 Huy hiệu bạc17 Huy hiệu đồng5 silver badges17 bronze badges
Trong PHP, bạn sử dụng phương pháp
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
3 của ví dụ MySQLI.UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
1So sánh kết quả với giao dịch, chèn, phương thức trường hợp trong bản cập nhật 30.000 RAW.
Giao dịch: 5.5194580554962 Chèn: 0,20669293403625 Trường hợp: 16.474853992462 MULTI: 0.0412278175354
Insert: 0.20669293403625
Case: 16.474853992462
Multi: 0.0412278175354
Như bạn có thể thấy, nhiều câu truy vấn tuyên bố hiệu quả hơn câu trả lời cao nhất.
Chỉ trong trường hợp nếu bạn nhận được thông báo lỗi như thế này:
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
2Bạn có thể cần tăng
INSERT INTO students
[id, score1, score2]
VALUES
[1, 5, 8],
[2, 10, 8],
[3, 8, 3],
[4, 10, 7]
ON DUPLICATE KEY UPDATE
score1 = VALUES[score1],
score2 = VALUES[score2];
4 trong tệp cấu hình MySQL.Đã trả lời ngày 19 tháng 12 năm 2021 lúc 7:50Dec 19, 2021 at 7:50
SaghachisaghachiSaghachi
7279 Huy hiệu bạc18 Huy hiệu Đồng9 silver badges18 bronze badges
1
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
3 Đã trả lời ngày 11 tháng 12 năm 2016 lúc 7:43
I Am trying to update each col1 where col4 = col3 different value for each row
Akshay Bhanakshay BhanApr 23, 2020 at 4:25
2053 Huy hiệu bạc12 Huy hiệu Đồngankit giri
Để mở rộng câu trả lời @trevedhek,3 silver badges10 bronze badges
Trong trường hợp bản cập nhật phải được thực hiện với các khóa không duy nhất, sẽ cần 4 truy vấn
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
4Lưu ý: Đây không an toàn giao dịch
UPDATE students s
JOIN [
SELECT 1 as id, 5 as new_score1, 8 as new_score2
UNION ALL
SELECT 2, 10, 8
UNION ALL
SELECT 3, 8, 3
UNION ALL
SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
5Điều này có thể được thực hiện bằng cách sử dụng một bảng tạm thời.
Bước 1: Tạo các phím bảng tạm thời và các cột bạn muốn cập nhậtApr 16, 2020 at 13:30
ru51anru51anru51an
Bước 2: Chèn các giá trị vào bảng temp1 gold badge1 silver badge10 bronze badges
1