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

Làm thế nào để thực hiện giao nhau trên một bảng thành phần

Về mặt hiệu suất, truy vấn của bạn có vẻ ổn. Bạn đã đo lường nó để xem có thực sự có vấn đề không?

Nếu (object1_id, object2_id) là duy nhất thì bạn có thể viết truy vấn ngắn gọn hơn như sau:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6

Lưu ý rằng 6 là số ID được cung cấp. Điều này sẽ được thay đổi nếu một số ID khác được cung cấp. Bạn sẽ phải đo hiệu suất thực tế trên dadta của mình để xem liệu điều này có làm tăng tốc độ hay không.

Nếu bạn không thể cho rằng tính duy nhất thì điều này sẽ hoạt động:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6

Tuy nhiên, điều quan trọng nhất là đảm bảo bạn có chỉ mục thích hợp trên bàn của bạn! Đây là xa quan trọng hơn việc bạn viết truy vấn này hay truy vấn khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA 03134 lỗi kết nối ODP.NET 12 (VS2012) với cơ sở dữ liệu Oracle 11

  2. Thủ tục được lưu trữ trong Oracle Ví dụ với tham số IN OUT

  3. Cloud Native và DevSecOps ở quy mô lớn với Nền tảng đổi mới nhanh nhẹn Capgemini và Đám mây Oracle

  4. Làm thế nào để CẬP NHẬT một cột bằng cách sử dụng một cột khác trong bảng khác? Lỗi SQL:ORA-00933:Lệnh SQL không kết thúc đúng cách

  5. Hàm CHR () trong Oracle