我是数据库设计的新手,正在从事学校项目。我有3个表(Users
,Roles
和User_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
类似的东西
答案 0 :(得分:0)
在条件上使用sql join,如下所示:
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表中分配的所有用户及其角色。如果您提供了表的键和其他属性,那么回答您的问题会更容易。