主表+关联表查询

steven7677 2017-06-03 06:02:51
一张表存人员基本信息,一张关联表存人员类别(一个人可以有多个类别),现在需要把两张表关联起来进行查询,实现姓名、性别、类别进行检索,每个条件可以单独查询,如按性别查询;也可以组合查询,如按性别+类别查询,其中类别可以单选(如C),也可以多选(如D、C,既同时包括C、D类别的人员)。前端用JAVA,请教如何用一条SQL搞定这个查询,我用的mysql5.5 版本,测试数据如下:

DROP TABLE IF EXISTS user_basic;
CREATE TABLE user_basic (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) DEFAULT NULL,
user_sex VARCHAR(2) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO user_basic(user_name,user_sex)
SELECT '崔健','男' UNION ALL
SELECT '邓超','男' UNION ALL
SELECT '刘涛','女' UNION ALL
SELECT '崔永元','男';

DROP TABLE IF EXISTS user_category;
CREATE TABLE user_category(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
fatid INT UNSIGNED NOT NULL,
user_category VARCHAR(10),
PRIMARY KEY (id),
FOREIGN KEY (fatid) REFERENCES user_basic(id)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;

INSERT INTO user_category(fatid,user_category)
SELECT 1,'A' UNION ALL
SELECT 1,'C' UNION ALL
SELECT 1,'D' UNION ALL
SELECT 2,'B' UNION ALL
SELECT 2,'C' UNION ALL
SELECT 3,'C' UNION ALL
SELECT 3,'D' UNION ALL
SELECT 3,'E' UNION ALL
SELECT 4,'D';

...全文
221 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
steven7677 2017-06-04
  • 打赏
  • 举报
回复
没想清楚关联表的问题,由于可以多选关联表(人员类别),就给SQL语句构造带来很大问题
ACMAIN_CHM 2017-06-04
  • 打赏
  • 举报
回复
这个一般是在程序中实现,通过对用户输入的条件进行判断生成不同的SQL语句的WHERE部分,

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧