Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Vấn đề thiết kế thủ tục lưu trữ trong MySQL. Recusion hay Hierarchy?

Một nơi tốt để bắt đầu sẽ là:

SELECT 
    A.num_1, B.num_2 
FROM 
    Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2) 
ORDER BY A.num_1, B.num_2;

Bên trong thủ tục đã lưu trữ của bạn, hãy đặt nó vào một con trỏ, lặp lại trên con trỏ và đối với mỗi hàng, hãy thực hiện CHÈN BỎ QUA. Tức là:

DECLARE num1,num2 INT;
DECLARE done DEFAULT 0;
DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN mycursor;

my_loop: LOOP
    FETCH mycursor INTO num1, num2;
    IF done THEN
       LEAVE my_loop;
    END IF;
    INSERT IGNORE INTO Smaller VALUES (num1,num2);
END LOOP;

Để trả lời câu hỏi đã cập nhật của bạn, không hoàn toàn chắc chắn nếu bạn muốn kết nối theo quan hệ giữa các hàng duy nhất (bạn sẽ cần hai cột để lưu trữ mối quan hệ này, vì vậy nó sẽ khá giống nhau). Hoặc nếu bạn có nghĩa là bạn có một bảng chứa tất cả các số và một bảng hai cột khác chứa quan hệ giữa các hàng của bảng đầu tiên.

Hoặc, cuối cùng, nếu bạn muốn một bảng chỉ chứa các chuỗi có "1-2", "1-3", v.v. Nếu đúng như vậy, tôi sẽ giữ nó dưới dạng hai cột riêng lẻ và chỉ xuất chúng dưới dạng chuỗi bằng CONCAT khi bạn thăm dò ý kiến cái bàn :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất dữ liệu từ Cơ sở dữ liệu MySQL

  2. dọn dẹp db dữ liệu dư thừa

  3. Vấn đề CHÍNH CHỦ YẾU với việc tạo bảng trong Rails bằng lệnh rake db:migrate với mysql

  4. TẠO BẢNG MySQL và T-SQL với các ví dụ về cú pháp

  5. CẬP NHẬT / XÓA trong mysql và nhận danh sách id hàng bị ảnh hưởng?