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

Chyba dotazu MySQL s CASE a INNER JOIN

Nemůžete vybrat tabulku, kterou chcete připojit k případu. Měli byste se k oběma tabulkám připojit zleva a poté vybrat hodnotu z jedné z nich v case prohlášení, jako je toto:

SELECT a.user_id, 
       a.api_type,
       (case WHEN a.api_type = 0 THEN b.avatar ELSE c.avatar END) as avatar,
       (case WHEN a.api_type = 0 THEN b.user_id ELSE c.user_id END) as user_id
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id
WHERE a.cookie_hash = :cookie_hash

Pravděpodobně nepotřebujete poslední výraz (...as user_id jedna), protože se bude rovnat a.user_id pokud je v některém z api_twitter řádek nebo api_foursquare který odpovídá a.user_id .

Musíte také zadat WHERE klauzule za FROM klauzule:

UPRAVIT: Vezmeme-li v úvahu skvělý návrh ypercube, dotaz by vypadal takto:

SELECT a.user_id, 
       a.api_type,
       COALESCE(b.avatar, c.avatar) as avatar
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id AND a.api_type = 0
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id and a.api_type = 1
WHERE a.cookie_hash = :cookie_hash


  1. Spojit a více a podmínky

  2. 7 způsobů, jak vrátit všechny tabulky s primárním klíčem na SQL Server

  3. Měření online času na webu

  4. Aktualizujte řádek, ale vložte, pokud řádek v codeigniter neexistuje