sql >> Databáze >  >> RDS >> Mysql

Dotaz MySQL, kde JOIN závisí na CASE

Pravděpodobně potřebuje vyladit, aby se vrátily správné výsledky, ale doufám, že to pochopíte:

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

Upravit:

Malá poznámka o CASE...END . Váš původní kód se nespustí, protože na rozdíl od PHP nebo JavaScriptu je SQL CASE není struktura řízení toku, která umožňuje zvolit, která část kódu bude spuštěna. Místo toho vrátí výraz. Takže můžete udělat toto:

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

... ale ne toto:

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


  1. PostgreSQL:Jak nastavím search_path na uživatelské úrovni?

  2. DROP TABLE, POKUD EXISTUJE v MariaDB

  3. Dědičnost tříd s .NET EF4.1 + MySQL

  4. MySQL-db lib pro Python 3.x?