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

2つの条件が子レコードの異なる行で一致する場合にマスターレコードを取得するための高度なMysqlクエリ

    実際、AsConfusedが示唆しているように、エイリアスを使用してTABLE2に2つの結合を行う必要があります

    -both of these are tested

    -- find t1 where it has 2 and 7 in t2
    
        select t1.*
        from table1 t1
        join table2 ov2 on t1.id=ov2.masterid and ov2.optionValue=2
        join table2 ov7 on t1.id=ov7.masterid and ov7.optionValue=7
    
    -- find t1 where it has 2 and 7 in t2, and no others in t2
    
    select t1.*, ovx.id
        from table1 t1
          join table2 ov2 on t1.id=ov2.masterid and ov2.optionValue=2
          join table2 ov7 on t1.id=ov7.masterid and ov7.optionValue=7
          LEFT OUTER JOIN table2 ovx on t1.id=ovx.masterid and ovx.optionValue not in (2,7)
        WHERE ovx.id is null
    


    1. MySQLストアドプロシージャからシェルコマンドを実行する

    2. 行が存在する場合でも、MySQL selectforupdateは空のセットを返します

    3. 現在のタイムスタンプと以前のタイムスタンプの違い

    4. SQLでテーブルと列を削除する方法