Giả sử tôi có các bảng sau:Truy vấn MySQL để cập nhật cột trong mysql dựa trên bảng?
tableA
a_name | age | country
Jordan | 5 | Germany
Jordan | 6 | Spain
Molly | 6 | Spain
Paris | 7 | France
John | 7 | Saudi Arabia
John | 5 | Saudi Arabia
John | 6 | Spain
TableB
id (auto increment primary key)
| age | country | group_num (initially null)
1 | 5 | Germany |
2 | 6 | Spain |
3 | 7 | France |
4 | 7 | Spain |
5 | 8 | France |
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia |
9 | 5 | Saudi Arabia |
Tôi muốn để có thể làm một số loại chọn/cập nhật nơi tôi có thể nhận được như sau giá trị cho cột "group_num":
tableB
id (auto increment primary key)
| age | country | group_num
1 | 5 | Germany | 1
2 | 6 | Spain | 1
3 | 7 | France | 1
4 | 7 | Spain |
5 | 7 | France | 2
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia | 1
9 | 5 | Saudi Arabia | 1
group_num được gán dựa trên các tiêu chí về:
1) Places person "a_name" went.
2) Whether other people visited that same country. (regardless of age).
Lý do tại sao tất cả các id của 1,2,3,8,9 có cùng groupId là vì Jordan, Molly, và Paris tất cả xảy ra với bằng cách nào đó được liên kết vì hai tiêu chí trên. (tất cả họ đều đi đến Tây Ban Nha) và các nước khác, tức là Đức đã được viếng thăm bởi Jordan người cũng viếng thăm Tây Ban Nha, vì vậy nó có cùng group_num. Ảrập Xêút đã được viếng thăm bởi John, người cũng viếng thăm Tây Ban Nha, vì vậy nó có cùng một group_num.
là có một số truy vấn SQL hoặc truy vấn (có thể có hoặc không liên quan đến việc tạo ra bảng "bổ sung" khác để có được kết quả mong muốn hiển thị ở trên? (tức là nó không quan trọng nếu group_num nên đầu tiên được lấp đầy với các giá trị auto_incrementing giống như "id", sau đó được cập nhật sau này nếu cần thiết. (có thể có giá trị không null cho các trường giá trị khác hiện được hiển thị là "(trống)"
Con trỏ/lặp lại rất chậm ... Sau đây là các bước tôi sẽ thực hiện để điền vào các giá trị đó, quá trình rất chậm bằng cách sử dụng con trỏ, nếu tôi có thể loại bỏ điều này, nó sẽ tuyệt vời:
- Đối với tableA, chúng ta thấy rằng Jordan đến Đức lúc 5 tuổi. (Group_Num trong bảng B cho [5, Đức] được cập nhật thành 1).
- Jordan thăm Tây Ban Nha lúc 6 tuổi. (Nhóm Num cho [6, Tây Ban Nha] được cập nhật thành 1 để hiển thị cùng một nhóm với cùng tên mà anh ấy đã ghé thăm Tây Ban Nha)
- Molly thăm Tây Ban Nha lúc 6 tuổi (group_num cho [6 , Tây Ban Nha] được cập nhật thành 1 vì ngay cả khi một người khác, cùng một cặp tuổi/quốc gia bị trúng)
- Paris đã đến Pháp lúc 7 tuổi (group_num trong bảngB cập nhật thành 2 vì cô ấy là người khác, đã truy cập hoàn toàn khác
- John thăm Ả Rập Xê Út ở tuổi 7 (nhóm_num cho [7, Saudi Arabia] trong bảngB được cập nhật thành 3 tuổi + cặp quốc gia)
- John thăm Ả Rập Xê Út ở tuổi 5 (group_num cho [5, Saudi Arabia] trong bảngB được cập nhật thành 3 cho độ tuổi + quốc gia kể từ khi nó vẫn là John)
- John thăm Tây Ban Nha lúc 6 tuổi (group_num cho [6, Tây Ban Nha] đã 1 .. Jordan đã truy cập ở đó trước , có thể có một số nhóm ... do đó group_num cho tất cả các địa điểm mà John đã ghé thăm [6, Tây Ban Nha], [5, Ả Rập Saudi] và [7, Ả Rập Saudi] đều được cập nhật thành 1
[Bạn đã thử gì?] (Http://www.whathaveyoutried.com/) Xem [hỏi lời khuyên] (http://stackoverflow.com/questions/ask-advice). –
Lập trình bằng cách sử dụng các con trỏ SQL để lặp qua từng hàng của bảng A và cập nhật bảng B khi cần thiết. Tìm cách tốt hơn để làm điều này nếu có thể với các truy vấn SQL. – Rolando
Thật không may là những người trong ví dụ có tên như Jordan (một quốc gia) và Paris (một thành phố nổi tiếng ở một quốc gia khác) – Magnus