Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: [Solved]Chuyển 1 cột từ Table này qua Table khác ?

  1. #1
    Ngày gia nhập
    11 2006
    Bài viết
    13

    Question [Solved]Chuyển 1 cột từ Table này qua Table khác ?

    Hiện tại mình có 2 Table. (2 table đều ko có primary key/foreign key)

    Table 1 gồm các cột Col001,Col002...Col010
    Table 2 cũng tương tự nhưng dữ liệu ở 2 cột cuối Col009 và Col010 là NULL

    Table 2 chứa dữ liệu update mới hơn nhưng ko có dữ liệu ở Col009 và Col010.
    Table 1 chứa dữ liệu cũ nhưng lại có dữ liệu ở 2 cột Col009 và Col010

    Bây giờ làm sao chuyển những dữ liệu ở cột Col009 và Col010 bên Table 1 vào Table 2 với điều kiện là Col001[Table1] = Col001[Table2] thì mới chuyển. Nếu value ở Col001[Table1] # Col002[Table2] thì cột 009 và 010 của record đó bên table 2 vẫn là NULL.

    type của Col001 là bigint
    type của Col009 và Col010 là nvarchar

    Vấn đề trên có thể thực hiện bằng query trong SQL ko ? Mong các bạn giúp đỡ ,cám ơn nhiều

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    đòi hỏi của bạn thực sự là khó,nếu chuyển toàn bộ DL từ table1 sang table2 hoặc ngược lại thì ko có vấn đề gì,chỉ cần dòng truy vấn
    nhưng đây ko phải là insert mà là update với 1 số cột có giá trị được lấy từ table này sang table kia,câu truy vấn tôi nghĩ là ko thực hiện được
    nhưng nếu xử lý trong lập trình tôi nghĩ là được
    căn bản là câu lệnh này
    PHP Code:
    update table2 set col9=(select col9 from table1 where col1=@col1),
    col10=(select col10 from table1 where col1=@col1where col1=@col1
    trước tiên lưu DL ở col1 trong bảng table1 vào mảng @col1
    sau đấy dùng vòng lặp duyệt từng phần tử trong mảng @col1,mỗi lần duyệt thì thực hiện câu lệnh update phía trên,nếu duyệt xong thì cho dừng update
    đấy chỉ là ý tưởng,còn lập trình thế nào là việc của bạn,nếu làm được nhớ reply nhé
    Đã được chỉnh sửa lần cuối bởi thanhlv : 29-10-2007 lúc 09:39 PM.
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    ----------------
    thôi chết,có thể dùng proc để làm việc này,tớ mới nghĩ ra
    tặng bạn cái proc này,nó đáp ứng mọi yêu cầu của bạn kể cả bỏ trống col9,col10 nếu các giá trị col1 ở table1 ko có trong col1 ở table2
    PHP Code:
    create proc chuyenDL
    as
    /*khai báo các biến cần thiết*/
    declare @count int
    declare @col1 int
    /*đếm số record trong table1*/
    set @count=(select count(*) from table1)
    /*làm khi tổng số record chưa bằng 0 */
    while @count 0
      
    /*bắt đầu*/
      
    begin
        
    /*duyệt từng giá trị ở col1 trong table1 */
        
    set @col1=(select col1 from table1 where (select count(*) from table1 as temp where temp.col1<=table1.col1)=@count)
        
    /*chuyển giá trị từ col9,col10 ở table1 sang col9,col10 ở table2 ứng với @col1 */
        
    update table3 set col9=(select col9 from table1 where col1=@col1),col10=(select col10 from table1 where col1=@col1where col1=@col1
        
    /*giảm số record xuống 1 */
        
    set @count=@count-1
        
    print @col1
      
    /*kết thúc*/
      
    end 
    thêm nữa ,chắc chắn vẫn có thể làm bằng lập trình như ở trên tôi đã nói
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    13

    Cám ơn bạn rất nhiều, nếu là lập trình hay store produce thì chắc là giải quyết được rồi.

    Đoạn code trên của bạn đúng là làm được ý tưởng của mình, nhưng ở đây bị kẹt vấn đề tốc độ máy và size database quá lớn :((, 1 table hơn 400 MB lận.

    Count số record trong 1 table thì ra được 4151397 record.
    Update cho riêng 1 record trong table2 mất 30 giây ( search quá lâu )

    4151397 record * 30s / 3600s / 24 giờ / 365 ngày = 4 năm. --> Thế thì chết mất

    Máy là P4 2.4 Ghz, RAM 768 MB :(

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    tôi nghĩ đó là cách duy nhất rồi nếu bạn ko muốn thực hiện lần lượt 4151397 lần update thủ công
    có cách làm tăng tốc độ là bạn nên chia nhỏ DL trong table1 ra thành nhiều đoạn con rồi gán vào temporary table,khi đó thì việc search sẽ nhanh hơn
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  6. #6
    Ngày gia nhập
    11 2006
    Bài viết
    13

    Mặc định [Solved]Chuyển 1 cột từ Table này qua Table khác ?

    Có chia nhỏ cũng ko giảm được bao nhiu cả, mình nghĩ chủ yếu là tốc độ CPU. Cứ cho là update 1 record mất 1s đi thì chỉ giảm được 30 lần --> hết 48 ngày !!!

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    vậy theo bạn có cách nào hay hơn ko
    với lại sao ko update định kì mà lại để cho dung lượng database lên khổng lồ như vậy mới tính đến chuyện update,tôi nghĩ chắc cái thời gian để cho dung lượng database lên đến chừng ấy cũng ko ít đâu,có khi cả hàng năm trời,vậy thì bạn còn thắc mắc gì về tốc độ update nữa,nếu là DL quan trọng thì 48 ngày cũng còn hơn là ko có cách giải quyết nào khác,bởi vì bạn để cho dung lượng lên quá lớn mới tính đến update thì đành phải chấp nhận vậy thôi
    nhưng tôi nghĩ nếu chia ra làm 30 khoảng thì tốc độ sẽ ko phải là nhanh hơn 30 lần mà còn hơn 30 lần cơ đấy,nó còn tùy vào tốc độ search,vì vậy cái thống kê 48 ngày của bạn chưa chắc đã chính xác
    Đã được chỉnh sửa lần cuối bởi thanhlv : 30-10-2007 lúc 12:08 PM.
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  8. #8
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Tôi không hiểu bạn cần copy cái cột đó làm gì .
    Bạn hoàn toàn có thể dùng sql để select ra cơ mà.
    Tôi nghĩ bạn nên đọc kỹ lại sql một chút.Với lại đây cũng không phải cách tối ưu.
    Select cái table 4M bản ghi cũng là điều cần phải tính toán kỹ.Có lẽ bạn nên phân hoạch lại cái DB cho hợp lý hơn.
    Thân!

Các đề tài tương tự

  1. Database Cập nhật dữ liệu từ table A sang table B.
    Gửi bởi sonsonsonson trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 14
    Bài viết cuối: 29-08-2015, 09:17 PM
  2. MS SQL Lỗi Truyền được tên table vào procedure lỗi Must declare the table variable?
    Gửi bởi khanh120 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 14-11-2013, 11:55 PM
  3. Tạo quan hệ giữa table giáo viên và table môn học nên làm thế nào?
    Gửi bởi while trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 20-10-2011, 09:50 PM
  4. MS SQL Lỗi Lỗi There are no primary or candidate keys in the referenced table khi tạo Foreign key của table
    Gửi bởi supervirus trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 15-06-2011, 05:22 PM
  5. [Solved]Cách tạo ID sinh ngẫu nhiên trong table???
    Gửi bởi hacker_it007 trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 8
    Bài viết cuối: 23-07-2007, 01:08 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn