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

特定の部門にのみ属するユーザーを選択します

    これは剰余のない関係部門(RDNR)です。 問題。これを参照してください 記事 この種の問題に多くの解決策を提供するDwainCampsによる。

    最初の解決策

    SQLフィドル

    SELECT empId
    FROM (
        SELECT
            empID, cc = COUNT(DISTINCT department)
        FROM employe
        WHERE department IN('Y', 'Z')
        GROUP BY empID
    )t
    WHERE
        t.cc = 2
        AND t.cc = (
            SELECT COUNT(*)
            FROM employe
            WHERE empID = t.empID
        )
    

    2番目の解決策

    SQLフィドル

    SELECT e.empId
    FROM employe e
    WHERE e.department IN('Y', 'Z')
    GROUP BY e.empID
    HAVING
        COUNT(e.department) = 2
        AND COUNT(e.department) = (SELECT COUNT(*) FROM employe WHERE empID = e.empId)
    

    GROUP BYを使用しない およびHAVING

    SELECT DISTINCT e.empID
    FROM employe e
    WHERE
        EXISTS(
            SELECT 1 FROM employe WHERE department = 'Z' AND empID = e.empID
        )
        AND EXISTS(     
            SELECT 1 FROM employe WHERE department = 'Y' AND empID = e.empID
        )
        AND NOT EXISTS(
            SELECT 1 FROM employe WHERE department NOT IN('Y', 'Z') AND empID = e.empID
        )
    


    1. データベース(接続)が存在するかどうかを確認するAntタスク?

    2. PHPのMySql応答からリソースID#6をエコーするにはどうすればよいですか?

    3. 最後のSQLクエリから挿入された行数をカウントする

    4. 重複するエントリをマージしてから削除する