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

mysql結合テーブルクエリ2の値

    これを解決する方法はたくさんあります。最も簡単なのは、おそらくいくつかのexistsを使用することです。 句、またはattributesを結合します テーブルを2回使用しますが、group byを使用することもできます およびhaving 同じ結果を達成するための句:

    -- option 1: using multiple exists clauses
    select p.id, p.productname
    from Products p
    where exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 3)
      and exists (select 1 from Attributes a where p.ID = a.ProductID and a.AttributeID = 4);
    
    -- option 2: using multiple joins
    select p.id, p.productname
    from Products p
    join Attributes a3 on p.ID = a3.ProductID
    join Attributes a4 on p.ID = a4.ProductID
    where a3.AttributeID = 3
      and a4.AttributeID = 4;
    
    -- option 3: using aggregate and having
    select p.id, p.productname
    from Products p
    join Attributes a on p.ID = a.ProductID
    group by p.id, p.productname
    having sum(case when a.AttributeID = 3 then 1 else 0 end) > 0
       and sum(case when a.AttributeID = 4 then 1 else 0 end) > 0;
    
    -- option 4: using having and count
    select p.id, p.productname
    from Products p
    join Attributes a on p.ID = a.ProductID
    where a.AttributeID in (3,4)
    group by p.id, p.productname
    having count(distinct a.attributeid) = 2;
    

    どちらの方法が最適かは、必要な結果やインデックスなどによって異なります。

    サンプルSQLフィドル。




    1. SQL ServerでのSCHEMA_ID()のしくみ

    2. bind_paramを使用してMySQLiにMySQLNOW()関数を使用してレコードを挿入するにはどうすればよいですか?

    3. 重複キーでは、Nullまたは空の値のみを更新します

    4. 5プロジェクト開発中のMySqlの有用なクエリ