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

Truy vấn SQL phức tạp - tìm các mục khớp với nhiều khóa ngoại khác nhau

Miễn là bạn có các chỉ mục duy nhất trên cả (ProductID, CategoryID)(ProductID, InvoiceID) :

SELECT  ProductID
FROM    (
        SELECT  ProductID
        FROM    ProductInvoice
        WHERE   InvoiceID IN (1, 2)
        UNION ALL
        SELECT  ProductID
        FROM    ProductCategory pc
        WHERE   CategoryID IN (3, 4)
        ) q
GROUP BY
        ProductID
HAVING  COUNT(*) = 4

hoặc nếu các giá trị của bạn được chuyển vào CSV chuỗi:

WITH    catids(value) AS
        (
        SELECT  DISTINCT CAST([value] AS INT)
        FROM    dbo.split(@categories, ' '))
        ), 
        (
        SELECT  DISTINCT CAST([value] AS INT)
        FROM    dbo.split(@invoices, ' '))
        )
SELECT  ProductID
FROM    (
        SELECT  ProductID
        FROM    ProductInvoice
        WHERE   InvoiceID IN
                (
                SELECT  value
                FROM    invoiceids
                )
        UNION ALL
        SELECT  ProductID
        FROM    ProductCategory pc
        WHERE   CategoryID IN
                (
                SELECT  value
                FROM    catids
                )
        ) q
GROUP BY
        ProductID
HAVING  COUNT(*) = 
        (
        SELECT  COUNT(*)
        FROM    catids
        ) + 
        (
        SELECT  COUNT(*)
        FROM    invoiceids
        )

Lưu ý rằng trong SQL Server 2008 bạn có thể chuyển các tham số có giá trị bảng vào các thủ tục được lưu trữ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận danh sách các bảng có hoặc không có Ràng buộc khóa chính trong tất cả Cơ sở dữ liệu từ Phiên bản SQL Server - Hướng dẫn SQL Server / TSQL Phần 61

  2. Điều gì xảy ra với Id khóa chính khi nó vượt quá giới hạn?

  3. Sự khác biệt giữa varchar và nvarchar là gì?

  4. WHERE IN (mảng ID)

  5. Cách gỡ cài đặt SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 23.1