1

次のようにユーザーテーブルをクエリする方法はありますか:

| id | username |
-----------------
| 1  | user1    |
| 2  | user2    |
| 3  | user3    |

および user_roles テーブル:

| id_user | id_role |
---------------------
|    1    |    1    |
|    1    |    2    |
|    1    |    3    |
|    2    |    2    |
|    3    |    1    |

id = 1 のロールが管理者ロールであると仮定すると、次のような結果が生成されます。

| id | username | admin |
-------------------------
| 1  | user1    |   Y   |
| 2  | user2    |   N   |
| 3  | user3    |   Y   |

ネストされた SELECT ステートメントを使用して実行できると思いますが、JOIN を使用して実行できるかどうか疑問に思っていました。

編集:管理者列の値はYまたはNである必要はありません。管理者ロールID(1)またはNULL、またはユーザーが管理者であるかどうかを知らせるものであれば何でもかまいません

4

3 に答える 3

1

私はこれを試してみます:

select u.id, u.username, if (id_role is null,  'N', 'Y') as is_admin
  from users u
  left outer join user_roles r
    on u.id = r.id_user and r.id_role = 1

しかし、私は100%確信が持てません。

于 2010-01-14T12:22:15.007 に答える
1

このように参加するとid_role、結果が得られます。

SELECT u.*, r.id_role
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user

WHERE r.id_role=1管理者などだけを取得するために追加できます。

ただし、必要に応じて管理者を「Y」または「N」として取得するにIFは、id_role が 1 であるかどうかに関係なく on を使用できます。

SELECT u.*, IF(r.id_role = 1, "Y", "N") as admin
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user
于 2010-01-14T12:18:45.917 に答える
0
select u.id_user, if(count(1) > 0, 'Y', 'N')
from user u left outer join user_roles ur on u.user_id = ur.user_roles
where ur.id_role=1
group by u.id_user

私はmysqlを使用していないので、「if」機能があることをグーグルで検索しました。それが間違っている場合は、DECODE、COALESCEなどに置き換えてください。

于 2010-01-14T12:25:53.017 に答える