sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel, hvor JOIN afhænger af CASE

Det skal sandsynligvis justeres for at returnere de korrekte resultater, men jeg håber, du forstår ideen:

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

Rediger:

En lille note om CASE...END . Din originale kode kører ikke, fordi SQL CASE i modsætning til PHP eller JavaScript er ikke en flowkontrolstruktur, der gør det muligt at vælge, hvilken del af koden der skal køre. I stedet returnerer det et udtryk. Så du kan gøre dette:

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

... men ikke dette:

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


  1. Hybrid OLTP/Analytics Database Workloads i Galera Cluster ved hjælp af asynkrone slaver

  2. Sådan tilføjer du lodrette grænser til dit SQL*Plus / SQLcl-outputgitter

  3. Hvad denne forespørgsel gør for at oprette kommasepareret liste SQL Server?

  4. Sådan konfigureres klynge-til-klynge-replikering til PostgreSQL