Chúng tôi có bảng tiếp theo trong hệ thống của chúng tôiTruy vấn để đối sánh nhiều hàng?
Bảng đối tượng
object_id object_description
1 "Car"
2 "Person"
Bảng thuộc tính
attribute_id attribute_name
1 "hair_color"
2 "height"
3 "number_of_doors"
4 "engine_size"
Bảng ATTRIBUTE_VALUE
attribute_id attribute_value_id value
1 1 "black"
1 2 "blonde"
2 1 "more than 1 meter"
2 2 "less than 1 meter"
3 1 "5 doors"
3 2 "3 doors"
4 1 "more than 1.9"
4 2 "less than 1.9"
Bảng object_attribute
object_id attribute_id attribute_value_id
1 3 1 -- Car, number of doors,5
1 3 2 -- Car, number of doors,2
1 4 1 -- Car, engine size, greater than 1.9
1 4 2 -- Car, engine size, less than 1.9
Với cấu trúc này chúng tôi đang có rất nhiều vấn đề nhận được đối tượng phù hợp với nhiều tiêu chí (ví dụ: nhận được tất cả những chiếc xe với 3 cửa ra vào và kích thước động cơ lớn hơn 1.9) Hiện nay chúng tôi đang sử dụng cắt để làm điều này
SELECT OBJECT_ID
FROM object_attribute
WHERE attribute_id = 3
AND attribute_value = 2
INTERSECT
SELECT OBJECT_ID
FROM object_attribute
WHERE attribute_id = 4
AND attribute_value = 1
Có đối tượng khác nhau với số lượng khác nhau của các thuộc tính, vì vậy chúng tôi không thể sử dụng một số cố định của JOIN hoặc INTERSECTs nữa
Có cách nào tạo nhiều kết hợp của tất cả các thuộc tính trong một "cách động" không?
Những gì chúng ta muốn đạt được là một truy vấn năng động mà xây dựng một cái nhìn như thế này:
object_id | att_name_1 | att_value_1 | att_name_2 | att_value2 | att_name_n | attr_value_n
Khi số lượng các thuộc tính có thể thay đổi chúng ta nên trigered và cập nhật của các truy vấn khi một đối tượng mới được chèn
Guys Tôi nghĩ rằng những gì tôi có trong tâm trí là không thể, vì vậy chúng tôi có thể sẽ đi với cấu trúc truy vấn động này khi chạy. Cảm ơn tất cả các bạn cho câu trả lời của bạn
Bạn có thể vượt qua đối tượng tham gia vào thuộc tính và tham gia trái vào kết quả của bạn không? Hoặc nếu bạn chỉ muốn các thuộc tính tồn tại, bạn có thể bắt đầu từ Object_Attribute và tham gia vào cả hai cột khác? – Liath
RDBM nào? Retag cho khả năng hiển thị tốt hơn – Yaroslav
Bạn cần phải xây dựng một truy vấn động, với số tiền phải của JOIN trên chúng. – Borik