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

Postgresql:誤ったデータを返すクエリ

    あなたのWHERE 句は、empgroupidが存在する行を選択します empidではなく500または501のいずれかです ■すべてのempgroupid s配列を形成する[500, 501]

    ARRAY_AGGを使用できます HAVINGで 条項:

    SELECT empid 
    FROM empgroupinfo 
    GROUP BY empid
    -- ORDER BY clause here is important, as array equality checks elements position by position, not just 'same elements as'
    HAVING ARRAY_AGG(DISTINCT empgroupid ORDER BY empgroupid) = ARRAY[500, 501]
    

    [500, 501]の場所によって異なります 配列はから来ているので、それ自体がソートされているかどうかわからない場合があります。その場合、「含むANDが含まれる」(演算子@> および<@ )も機能するはずです。

    #= CREATE TABLE empgroupinfo (empid int, empgroupid int);
    CREATE TABLE
    Time: 10,765 ms
    
    #= INSERT INTO empgroupinfo VALUES (1, 500), (1, 501), (2, 500), (2, 501), (2, 502);
    INSERT 0 5
    Time: 1,451 ms
    
    #= SELECT empid 
       FROM empgroupinfo 
       GROUP BY empid
       HAVING ARRAY_AGG(empgroupid ORDER BY empgroupid) = ARRAY[500, 501];
    ┌───────┐
    │ empid │
    ├───────┤
    │     1 │
    └───────┘
    (1 row)
    
    Time: 0,468 ms
    


    1. JDBC SQLServerException:このドライバーは統合認証用に構成されていません。

    2. MySQLに多数の行を挿入するにはどうすればよいですか?

    3. これらのmysqlステートメントをマージするにはどうすればよいですか?

    4. 列名に%が付いたLIKE