Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage, bei der JOIN von CASE abhängt

Es muss wahrscheinlich optimiert werden, um die richtigen Ergebnisse zurückzugeben, aber ich hoffe, Sie verstehen es:

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

Bearbeiten:

Eine kleine Anmerkung zu CASE...END . Ihr ursprünglicher Code wird nicht ausgeführt, da im Gegensatz zu PHP oder JavaScript der SQL CASE ist keine Flusssteuerungsstruktur, die es ermöglicht, auszuwählen, welcher Teil des Codes ausgeführt wird. Stattdessen wird ein Ausdruck zurückgegeben. So können Sie Folgendes tun:

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

... aber nicht das:

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