Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL заявка, където JOIN зависи от CASE

Вероятно се нуждае от настройка, за да върне правилните резултати, но се надявам да разберете идеята:

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

Редактиране:

Малка бележка за CASE...END . Вашият оригинален код не се изпълнява, защото, за разлика от PHP или JavaScript, SQL CASE не е структура за контрол на потока, която позволява да се избере коя част от кода ще се изпълнява. Вместо това връща израз. Така че можете да направите това:

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

... но не и това:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel има много и принадлежи на параметри

  2. Урок за MySQL – Конфигуриране и управление на SSL на вашия MySQL сървър

  3. Редакторът на WordPress не актуализира файлове:Не може да комуникира обратно със сайта, за да провери за фатални грешки

  4. Грешка 1022 - Не мога да пиша; дублиран ключ в таблицата

  5. Изберете всички геопространствени точки вътре в ограничителна кутия