更新:なしロールを持つユーザーのためLEFT JOIN
を追加しました。
SELECT
tbl_user.*,
GROUP_CONCAT(role_name) AS roles
FROM
tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.userid
JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid
GROUP BY tbl_user.userid
合計でSELECT
リストに表示さよりも、MySQLが少ない列にGROUP BY
が許可されますが、他のRDBMSには、明示的tbl_user
の列をリストし、GROUP BY
に含める、または実行する必要があることに注意してください追加の自己結合tbl_user
を使用して、その表から残りの列を取得します。
ような何か:
SELECT
urole.userid,
uall.username,
uall.name,
uall.othercols,
urole.roles
FROM
tbl_user uall JOIN (
SELECT
tbl_user.userid,
GROUP_CONCAT(role_name) AS roles
FROM
tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.roleid
JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid
GROUP BY tbl_user.userid
) urole ON uall.userid = urole.userid
@Michaelフレイ私はすでにそれに対処するために、 'LEFT JOIN'でそれを更新しました。 –
左結合バージョンを試しただけですが、それでも役割が割り当てられているユーザーのみが返されます。 (今すぐセカンドセレクトを試してみよう) –
8行目でuallのやり方を説明できますか?それは結合(選択)の結果に与えられた名前ですか? –