Tôi đang gặp một số vấn đề với truy vấn SQL cũ đơn giản (nhược điểm của việc sử dụng ORM hầu hết thời gian :)).Tìm tất cả các hàng có 2 điều kiện bằng cách sử dụng SQL (bảng riêng biệt)
Tôi đang có 2 bảng, PRODUCTS
và RULES
. Trong bảng RULES
Tôi đã xác định các quy tắc cho sản phẩm. Những gì tôi muốn là viết một truy vấn để có được tất cả các sản phẩm có quy tắc được xác định.
quy tắc được xác định bởi 2 cách:
- Bạn có thể chỉ định
RULE
cho chỉ có một sản phẩm (ProductID
có giá trị,SectorID
là NULL) - Bạn có thể chỉ định
RULE
để biết thêm rằng một trong những sản phẩm sử dụngSectorID
(ProductID
là NULL)
Kết quả cần có tất cả các sản phẩm có quy tắc (product.ID - rule.ProductID
) nhưng cũng tất cả các sản phẩm có ar e được xác định trong các lĩnh vực có trong bảng quy tắc (product.SectorID - rule.SectorID
).
Ngoài ra, kết quả không thể có sản phẩm trùng lặp (sản phẩm được xác định bởi productId
trong RULES
hoặc bằng SectorID
)
Ví dụ:
HÀNG
ID SectorID
1 1
2 1
3 1
4 2
5 3
6 3
QUY
ID ProductID SectorID
1 1 NULL
4 NULL 1
5 6 NULL
Kết quả mong đợi
PRODUCTS with IDs : 1, 2, 3, 6
Điều này * sẽ * có thể là nhanh nhất (được đưa ra chỉ mục có liên quan). Tách OR thành hai chân EXISTS riêng biệt có thể cải thiện mọi thứ: 'WHERE EXISTS (... trong đó p.ID = r.ProductID) OR EXISTS (... WHERE p.SectorID = r.SectorID)' – wildplasser
@wildplasser Theo như Tôi có thể nói, [truy vấn được viết lại như là một tham gia anyway] (http://sqlfiddle.com/#!6/7c91c/2) với cùng một kế hoạch như tham gia dưới đây. –