sql >> データベース >  >> RDS >> Mysql

CASEおよびINNERJOINでのMySQLクエリエラー

    caseステートメントで結合するテーブルを選択することはできません。両方のテーブルに左結合してから、caseでどちらかのテーブルから値を選択する必要があります このようなステートメント:

    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
    

    おそらく最後の式は必要ありません(...as user_id 1)、a.user_idと等しくなるため いずれかのapi_twitterに行がある場合 またはapi_foursquare a.user_idと一致します 。

    また、WHEREを配置する必要があります FROMの後の句 条項:

    編集: ypercubeのすばらしい提案を考慮すると、クエリは次のようになります。

    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. 価格をMysqlに10進数または整数として保存できますか?

    2. current_timeがPostgreSQLでどのように機能するか

    3. Djangomanytomanyクエリの奇妙な動作

    4. COUNT_BIG()がSQLServerでどのように機能するか