[英]Combine varchar rows of MySql using Union query
我有两个表,称为部门和职能。
部门
------------------------
dept_id | dept_name
------------------------
1 | department1
2 | department2
------------------------
功能
--------------------------------------------------------------
function_id | function_name | dept_id | is_main_function
--------------------------------------------------------------
1 | function1 | 1 | 1
2 | function2 | 1 | 0
3 | function3 | 1 | 0
--------------------------------------------------------------
这是我的查询
select dept_name,function_name as main_function,null as sub_function from department d,functon f where d.dept_id = f.dept_id and is_main_function = 1
union
select dept_name,null as main_function,function_name as sub_function from department d,functon f where d.dept_id = f.dept_id and is_main_function = 0
此查询的输出是
------------------------------------------------
dept_name | main_function | sub_function
------------------------------------------------
department1 | function1 | null
department1 | null | function2
department1 | null | function2
------------------------------------------------
但我想要的是
------------------------------------------------
dept_name | main_function | sub_function
------------------------------------------------
department1 | function1 | function2
department1 | function1 | function2
------------------------------------------------
有没有可能得到这个输出?
您可以使用以下解决方案使用INNER JOIN
而不是UNION
:
SELECT d.dept_name, f1.function_name AS main_function, f2.function_name AS sub_function
FROM department d
INNER JOIN `function` f1 ON d.dept_id = f1.dept_id AND f1.is_main_function = 1
INNER JOIN `function` f2 ON d.dept_id = f2.dept_id AND f2.is_main_function = 0
试试这个,它使用JOIN
来实现你的目标:
declare @department table (dept_id int, dept_name varchar(20));
insert into @department values
(1 , 'department1'),
(2 , 'department2');
declare @function table (function_id int, function_name varchar(20), dept_id int, is_main_function int);
insert into @function values
(1 , 'function1' , 1 , 1),
(2 , 'function2' , 1 , 0),
(3 , 'function3' , 1 , 0);
select d.*, main.function_name, sub.function_name
from @department d
join @function main on d.dept_id = main.dept_id and main.is_main_function = 1
join @function sub on d.dept_id = sub.dept_id and sub.is_main_function = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.