MySQLは、参加条件が満たされていないときにダミーレコードを選択します
-
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エントリがあるレコードが返されます。
所属していません StackOverflow