Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kueri SQL yang rumit--menemukan item yang cocok dengan beberapa kunci asing yang berbeda

Asalkan Anda memiliki indeks unik di kedua (ProductID, CategoryID) dan (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

atau, jika nilai Anda diteruskan dalam CSV string:

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
        )

Perhatikan bahwa di SQL Server 2008 Anda dapat meneruskan parameter bernilai tabel ke dalam prosedur tersimpan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu file MDF?

  2. Apa itu Basis Data dan Sistem Manajemen Basis Data Relasional (RDBMS)

  3. Ganti nama Kunci Utama di SQL Server (T-SQL)

  4. Cara Menambahkan atau Menghapus Kolom dengan Menggunakan GUI di SQL Server - Tutorial SQL Server / T-SQL Bagian 39

  5. Memformat Nomor Telepon di SQL Server (T-SQL)