sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga där JOIN beror på CASE

Det behöver förmodligen justeras för att returnera rätt resultat men jag hoppas att du förstår idén:

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

Redigera:

En liten notering om CASE...END . Din ursprungliga kod körs inte eftersom SQL CASE till skillnad från PHP eller JavaScript är inte en flödeskontrollstruktur som gör det möjligt att välja vilken del av koden som ska köras. Istället returnerar det ett uttryck. Så du kan göra så här:

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

... men inte detta:

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


  1. Oracle Skillnader mellan NVL och Coalesce

  2. MySQL LADDA DATAINFIL med PÅ DUBLIKATNYCKELUPPDATERING

  3. Räknar alla inlägg som tillhör en kategori OCH dess underkategorier

  4. Felkod:1822. Det gick inte att lägga till den främmande nyckeln. Saknas index för begränsningen 'ekdromes_ibfk_1' i den refererade tabellen 'pwlhseis'