sql >> データベース >  >> RDS >> Sqlserver

複雑なSQLクエリ-複数の異なる外部キーに一致するアイテムの検索

    両方の(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
    

    または、値がCSVで渡された場合 文字列:

    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
            )
    

    SQL Server 2008では注意してください テーブル値のパラメータをストアドプロシージャに渡すことができます。



    1. MySQLの自動インクリメントID(再)を1から開始する

    2. @@ IDENTITYを使用して、SQLServerで最後に挿入されたID値を返します

    3. 一般的なMySQLフィールドとそれらの適切なデータ型

    4. Mysqlエラー1005(HY000):テーブル'tmp'を作成できません(errno:13)