Điều này sẽ giúp bạn có được những gì bạn cần ... Mỗi điều kiện mệnh đề "HOẶC" d where, bạn có thể tiếp tục thêm vào như một mục đủ điều kiện. Sau đó, chỉ cần điều chỉnh mệnh đề "Có" để đáp ứng số lượng giống như tiêu chí bạn đang cho phép ... Tôi đã đặt bảng quan hệ trước vì điều đó sẽ có một tập hợp so khớp nhỏ hơn trên "Giá trị" của giá trị Thành phố hoặc loại .. . Đảm bảo bạn có một chỉ mục trên bảng quan hệ trên cột "VALUE".
SELECT STRAIGHT_JOIN
rel.id_obj
from
relations rel
join attributes atr
on rel.id_addr = atr.id
where
( rel.value = 'Apartment' AND atr.name = 'Type' )
or ( rel.value = 'Some City' AND atr.name = 'City' )
group by
atr.id_obj
having
count(*) = 2
limit
0, 20
Nếu bạn muốn tất cả dữ liệu đối tượng thực tế TỪ kết quả này, bạn sẽ bọc nó giống như ...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id