sql >> Database >  >> RDS >> Mysql

MySQL-query waarbij JOIN afhankelijk is van CASE

Het moet waarschijnlijk worden aangepast om de juiste resultaten te retourneren, maar ik hoop dat je het idee krijgt:

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

Bewerken:

Een kleine opmerking over CASE...END . Uw originele code wordt niet uitgevoerd omdat, in tegenstelling tot PHP of JavaScript, de SQL CASE is geen flow control-structuur die het mogelijk maakt om te kiezen welk deel van de code wordt uitgevoerd. In plaats daarvan wordt een expressie geretourneerd. Dus je kunt dit doen:

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

... maar niet dit:

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


  1. Hoe kunt u zien of een PL/SQL-pakket, procedure of functie wordt gebruikt?

  2. Volledige MariaDB-codering in rust en tijdens transport voor maximale gegevensbescherming - deel twee

  3. Rijwaarden samenvoegen T-SQL

  4. Mysql bestelling verwijderen door