MySQLは、参加条件が満たされていないときにダミーレコードを選択します

StackOverflow https://stackoverflow.com/questions/6362132

  •  28-10-2019
  •  | 
  •  

質問

私には2つのテーブルがあります。1つはヒットのレコード、もう1つはユーザーテーブルです。ユーザーがログインしている場合、ヒットはそのユーザーのIDで記録されます。ユーザーがログインしていない場合、ヒットは次のように記録されます user_id = 0

レポートを実行したとき、ユーザーテーブルに対するヒットに参加してユーザー名を取得したいのですが、ID 0のユーザーはいないので、悪いデータを取得します(たとえば、ヒットのすべての非ログの結果はありません。 )。結合条件が満たされていない「ゲスト」のようなダミーユーザー名を選択する方法はありますか?

これがクエリです:

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id, b.username
FROM hits a
JOIN users b ON a.user_id = b.id
WHERE 1
役に立ちましたか?

解決

左結合を試して、デフォルトに合体してください

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id,
  COALESCE( b.username, 'GUEST')
FROM hits a
LEFT JOIN USERS b ON a.user_id = b.id

他のヒント

左外の結合を行う必要があります。これにより、ユーザーがユーザーテーブルに存在しないヒットテーブルにuser_idエントリがあるレコードが返されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top