2013-03-20 33 views
5

Tôi có hai bảng có tên là DistrictsSchools. Bảng Districts chứa cột có tên Schools.cập nhật trường bảng cơ sở dữ liệu với danh sách được phân cách bằng dấu phẩy từ tham gia

tôi cần phải cư trú trong Schools cột của bảng Districts từ Schools bảng tương ứng, do đó mỗi hàng trong bảng Districts có một dấu phẩy tách ra danh sách các giá trị của tên trường từ bảng Schools.

Tôi làm cách nào để thực hiện việc này? Tôi có nên sử dụng truy vấn UPDATE hoặc thủ tục được lưu trữ không?

tôi chỉ có xa như:

SQL Fiddle

Districts Table

+------------+------+---------+ 
| DistrictId | Name | Schools | 
+------------+------+---------+ 
|   1 | a |   | 
|   2 | b |   | 
|   3 | c |   | 
|   4 | d |   | 
+------------+------+---------+ 

Schools Table

+----------+------------+------------+ 
| SchoolId | SchoolName | DistrictId | 
+----------+------------+------------+ 
|  1 | s1   |   1 | 
|  2 | s2   |   1 | 
|  3 | s3   |   2 | 
|  4 | s4   |   2 | 
|  5 | s5   |   4 | 
+----------+------------+------------+ 

Làm thế nào nhu cầu đầu ra là

+------------+------+---------+ 
| DistrictId | Name | Schools | 
+------------+------+---------+ 
|   1 | a | s1,s2 | 
|   2 | b | s3,s4 | 
|   3 | c |   | 
|   4 | d | s5  | 
+------------+------+---------+ 

Trả lời

4

Với sự giúp đỡ của FOR XML PATHSTUFF Để nối các giá trị, bạn có thể dễ dàng cập nhật bảng District với kết quả mong muốn của bạn.

UPDATE a 
SET  a.Schools = b.SchoolList 
FROM Districts a 
     INNER JOIN 
     (
      SELECT DistrictId, 
        STUFF((SELECT ', ' + SchoolName 
          FROM Schools 
          WHERE DistrictId = a.DistrictId 
          FOR XML PATH ('')) 
         , 1, 1, '') AS SchoolList 
      FROM Districts AS a 
      GROUP BY DistrictId 
     ) b ON A.DistrictId = b.DistrictId 
WHERE b.SchoolList IS NOT NULL 
+0

Sử dụng 'STUFF (..., 1, 2, '') 'thay vì kể từ delimiter' '' 'là 2 nhân vật - điều này sẽ ngăn chặn danh sách từ việc một không gian hàng đầu – ovinophile

Các vấn đề liên quan