Nếu bạn thấy mình ở trong tình huống bắt đầu có column1
, column2
trên bảng - rất có thể thiết kế của bạn đang có sai sót và thay vào đó, bạn nên tạo một bảng riêng - trong đó mỗi columnX
nhận được một hàng của riêng nó. Luôn luôn tốt hơn nếu có một bảng riêng biệt nếu bạn thấy mình có nhiều cột lặp lại trên cùng một bảng.
Bằng cách đó, bạn tránh được việc lưu trữ các giá trị được phân tách bằng dấu phẩy trong các cột, bạn tránh bị hỏng mã / truy vấn của mình nếu bạn đột nhiên phải giới thiệu một giá trị khác column{X+1}
- và thay vào đó có thể có nhiều hoặc ít giá trị đầu vào mà bạn cần.
Đối với bạn, đó sẽ giống như một bảng mới có tên land_owner_input
, nơi bạn có giá trị (mà bạn sẽ đặt trong columnX
) và tham chiếu đến hàng trong land_owner
mà giá trị thuộc về.
Mẫu thiết kế điển hình sẽ là một cái gì đó như thế này.
CREATE TABLE land_owner_input (
land_owner_input_id INT(11) AUTO_INCREMENT
land_owner_id INT(11),
land_owner_input_value VARCHAR(MAX)
);
Hãy nhớ rằng land_owner_id
của bạn trong bảng mới phải có cùng loại và kích thước với ID mà nó tham chiếu.
Bạn cũng có thể tạo ràng buộc khóa ngoại giữa land_owner_id
và ID của land_owner
bảng để đảm bảo tính toàn vẹn của dữ liệu.
Sau khi có bảng mới, bạn có thể truy vấn chúng cùng nhau bằng cách sử dụng LEFT JOIN
(hoặc JOIN
bình thường nếu bạn chỉ muốn trả về các hàng nếu nó có giá trị đầu vào).
SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
ON loi.land_owner_id = lo.land_owner_id