3

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

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

クエリは次のとおりです。

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
4

2 に答える 2

1

左結合とデフォルトへの COALESCE を試してください

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
于 2011-06-15T18:03:00.100 に答える
0

LEFT OUTER JOIN を実行する必要があります。これにより、users テーブルにユーザーが存在しないヒット テーブルに user_id エントリを持つレコードが返されます。

于 2011-06-15T18:03:35.937 に答える