从两个表中选择所有行

时间:2013-04-20 10:56:42

标签: mysql jsp

我是数据库设计的新手,正在从事学校项目。我有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 

类似的东西

1 个答案:

答案 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表中分配的所有用户及其角色。如果您提供了表的键和其他属性,那么回答您的问题会更容易。