sql >> Base de Datos >  >> RDS >> Mysql

Consulta MySQL donde JOIN depende de CASE

Probablemente necesite ajustes para devolver los resultados correctos, pero espero que entienda la idea:

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

Editar:

Una pequeña nota sobre CASE...END . Su código original no se ejecuta porque, a diferencia de PHP o JavaScript, SQL CASE no es una estructura de control de flujo que permita elegir qué parte del código se ejecutará. En su lugar, devuelve una expresión. Así que puedes hacer esto:

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

... pero no esto:

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