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

マージされた結果のセットを返すSQL

    これは、リレーショナル部門 で実現できます。 :

    select r.order_id from (
      select 
        dividend.*  
      from your_table_or_query as dividend  -- assumes no duplicates in `dividend`; use `distinct` if there are any
      inner join divisor
      on dividend.value = divisor.value
    ) as r
    group by r.order_id
    having count(*) = (select count(*) from divisor);
    

    結果:

    +----------+
    | order_id |
    +----------+
    |     1236 |
    |     1239 |
    +----------+
    2 rows in set (0.00 sec)
    

    ここで、クエリはyour_table_or_query および

    select 260 as value from dual union select 264 as value from dual
    

    divisorです 。

    これにより、注文ID1236および1239が返されます。その後、joinにすることができます 元のクエリに編集して、必要に応じてそれらの注文IDを持つすべての行を取得します。

    挿入ステートメントを含む完全なクエリ:

    create table divisor (value int);
    insert into divisor values (260), (264);
    
    create table your_table_or_query (value int, order_id int);
    insert into your_table_or_query values (260, 1234), (260, 1235), (260, 1236), (264, 1236), (260, 1237), (260, 1238), (260, 1239), (264, 1239), (264, 1240), (260, 1241);
    
    
    select y.* from (
      select r.order_id from (
        select
          dividend.*
        from your_table_or_query as dividend
        inner join divisor
          on dividend.value = divisor.value
      ) as r 
      group by r.order_id
      having count(*) = (select count(*) from divisor)
    ) as quotient
    inner join your_table_or_query y
      on quotient.order_id = y.order_id;
    

    結果:

    +-------+----------+
    | value | order_id |
    +-------+----------+
    |   260 |     1236 |
    |   264 |     1236 |
    |   260 |     1239 |
    |   264 |     1239 |
    +-------+----------+
    4 rows in set (0.00 sec)
    


    1. スレッドmainorg.hibernate.HibernateExceptionの例外:staxストリームへのアクセス中にエラーが発生しました

    2. glassfish 4&MySQL&JSTL

    3. Oracle10gでテーブル列の名前を変更する方法

    4. wp_postmetaへの参照が非常に遅いのはなぜですか?