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

JOINがCASEに依存するMySQLクエリ

    正しい結果を返すにはおそらく微調整が必​​要ですが、アイデアが得られることを願っています:

    SELECT ft1.task, COUNT(ft1.id) AS count
    FROM feed_tasks ft1
    LEFT JOIN pages p1 ON ft1.type=1 AND p1.id = ft1.reference_id
    LEFT JOIN urls u1 ON ft1.type=2 AND u1.id = ft1.reference_id
    WHERE COALESCE(p1.id, u1.id) IS NOT NULL
    AND ft1.account_id IS NOT NULL
    AND a1.user_id = :user_id
    

    編集:

    CASE...ENDについてのちょっとしたメモ 。 PHPやJavaScriptとは異なり、SQL CASEが原因で、元のコードは実行されません。 コードのどの部分を実行するかを選択できるフロー制御構造ではありません。代わりに、式を返します。だからあなたはこれを行うことができます:

    SELECT CASE
        WHEN foo<0 THEN 'Yes'
        ELSE 'No'
    END AS is_negative
    FROM bar
    

    ...しかしこれではありません:

    -- Invalid
    CASE 
        WHEN foo<0 THEN SELECT 'Yes' AS is_negative
        ELSE SELECT 'No' AS is_negative
    END
    FROM bar
    


    1. Oracleで時間のかかるSQLクエリのトップ5

    2. ALL_PROCEDURESビューにPROCEDURE_NAMEが表示されない

    3. ノードJSmysqlデータベースの切断

    4. MariaDBの日付から週番号を抽出する5つの関数