0

我是数据库设计的新手,正在做学校项目。我有 3 个表(UsersRolesUser_roles。我已经创建了可供用户使用的所有用户和角色。我创建了User_roles包含用户和分配给他们的角色的表。

我需要获取一个查询,该查询将为我提供所有用户、所有可用角色以及它们是否分配给用户。我的目标是列出所有可用的用户和可用的角色,以便我可以分配或删除访问权限。

我如何实现这一目标?

以下是表的架构

Users
 (
  `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(45) NULL ,
  `password` VARCHAR(45) NULL ,
  `first_name` VARCHAR(45) NULL ,
  `last_name` VARCHAR(45) NULL ,
  `Status` VARCHAR(45) NOT NULL DEFAULT 'Active' ,
  `date_from` DATE NULL ,
  `date_to` DATE NULL ,
  `created_by` VARCHAR(45) NOT NULL DEFAULT 'Sysadmin' ,
  `create_date` TIMESTAMP NOT NULL DEFAULT now() ,
 PRIMARY KEY (`user_id`)

Roles Tables
`role_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `role_name` VARCHAR(45) NOT NULL ,
  `date_from` DATETIME NULL DEFAULT '2000-01-01' ,
  `date_to` DATETIME NULL DEFAULT '2999-12-31' ,
  `created_by` VARCHAR(45) NOT NULL DEFAULT 'Sysadmin' ,
  `create_date` TIMESTAMP NOT NULL DEFAULT now() ,
  PRIMARY KEY (`role_id`) 

User_role Table
`user_role_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `user_id` INT UNSIGNED NOT NULL ,
  `role_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`user_role_id`) ,
  CONSTRAINT `fk_User_roles_Users1`
    FOREIGN KEY (`user_id` )
    REFERENCES `Users` (`user_id` )
    ON DELETE cascade
    ON UPDATE cascade,
  CONSTRAINT `fk_User_roles_Roles1`
    FOREIGN KEY (`role_id` )
    REFERENCES `Roles` (`role_id` )
    ON DELETE cascade
    ON UPDATE cascade

我的目标是从表用户中选择所有用户并显示可分配的角色以及是否已分配

例如

User_id      Role_id      Role_allocated 

相似的东西

4

1 回答 1

0

使用 sql join on 条件如下:

SELECT * FROM User_roles as ur 
INNER JOIN Users as u on ur.user_id = u.user_id
INNER JOIN Roles as r on ur.role_id = r.role_id;

假设表的主键为:Users => user_id, Roles => role_id。此查询将返回所有用户及其在 User_roles 表中分配的角色。如果您提供了表的键和其他属性,那么回答您的问题会更容易。

于 2013-04-20T11:06:19.370 回答