Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MySQL, w którym JOIN zależy od CASE

Prawdopodobnie wymaga poprawek, aby zwrócić prawidłowe wyniki, ale mam nadzieję, że wpadłeś na ten pomysł:

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

Edytuj:

Mała uwaga na temat CASE...END . Twój oryginalny kod nie działa, ponieważ, w przeciwieństwie do PHP lub JavaScript, SQL CASE nie jest strukturą kontroli przepływu, która pozwala wybrać, która część kodu zostanie uruchomiona. Zamiast tego zwraca wyrażenie. Możesz to zrobić:

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

... ale nie to:

-- 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. Znajdź najbliższą szerokość/długość geograficzną za pomocą zapytania SQL

  2. Wstrzykiwanie SQL MariaDb

  3. Jak zapisać kształt nakładki map Google w bazie danych?

  4. Debugowanie wyzwalaczy MySQL

  5. Wybierz z menu rozwijanego i odśwież stronę