MySql 将结果集作为条件并显示在最终的结果集中

MySql 码拜 8年前 (2016-02-06) 1712次浏览
各位高手好:
在下有个问题想讨教下:
现有一些基础表及表与表的关系表,相似于:用户表、角色表、用户角色表此类。
本人通过多次关联将需要的数据查出来了,这里我们把它叫做A;但是现在本人需要将A作为条件查询B,
同时本人需要将A和B同时作为结果显示出来。问一下该怎么做?本人现在是把A作为条件又写了一遍查询B,
然后通过UNION ALL 把他们拼起来。(A和B的表结构一致
请高手指引下,谢谢
解决方案

10

好像没有别的办法,毕竟是两个查询。

5

只能两个查询UNION ALL了吧

50

引用 8 楼 cherishxq 的回复:
Quote: 引用 3 楼 yupeigu 的回复:

大致就是这样子了:
select * from A
union all
select B.* from B
inner join A
on A.xx = B.xx

谢谢,表结构如下,

CREATE TABLE `cep_menu` (
  `ID` varchar(40) NOT NULL DEFAULT "" COMMENT "UUID",
  `NAME` varchar(40) DEFAULT NULL COMMENT "菜单名称(中文)",
  `NAME_EN` varchar(40) DEFAULT NULL COMMENT "菜单名称(英文)",
  `URL` varchar(200) DEFAULT NULL COMMENT "菜单URL",
  `DESCP` varchar(200) DEFAULT NULL COMMENT "描述",
  `ICON` varchar(100) DEFAULT NULL COMMENT "菜单图标",
  `PARENT_ID` varchar(40) DEFAULT NULL COMMENT "父ID",
  `SHOW_TOP` int(11) DEFAULT NULL COMMENT "独立导航",
  `SN` int(11) DEFAULT NULL COMMENT "排序",
  `DELETE_FLAG` bit(1) DEFAULT NULL,
  `CREATE_USER_ID` varchar(40) DEFAULT NULL,
  `CREATE_USER_NAME` varchar(40) DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL,
  `LAST_UPDATE_USER_ID` varchar(40) DEFAULT NULL,
  `LAST_UPDATE_USER_NAME` varchar(40) DEFAULT NULL,
  `LAST_UPDATE_TIME` datetime DEFAULT NULL,
  `MENU_TYPE` varchar(10) DEFAULT NULL COMMENT "目录/菜单",
  `ENTERPRISE_ID` varchar(40) DEFAULT NULL COMMENT "企业ID",
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT="菜单表";

本人的需求是根据用户ID找到用户可以操作的菜单,然后再根据菜单查找目录。然后将菜单和其目录一起返回。
参照高手你的语法本人本人写了如下语句:

SELECT* FROM (
SELECT * FROM cep_menu WHERE menu_type="菜单"
)a 
UNION ALL
SELECT b.* FROM cep_menu b WHERE b.id=a.parent_id

原因是mysql里不支持with通用表表达式,所以只能这么写了:

SELECT * FROM cep_menu WHERE menu_type="菜单"
UNION ALL
SELECT b.* FROM cep_menu b WHERE b.id in (SELECT parent_id FROM cep_menu WHERE menu_type="菜单")

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MySql 将结果集作为条件并显示在最终的结果集中
喜欢 (0)
[1034331897@qq.com]
分享 (0)