联合查询执行错误

时间:2019-04-10 19:37:03

标签: mysql mysql-workbench union

我正在尝试执行以下查询,但问题是它显示了一堆废话,我希望它显示那些女性依赖者以及相关的员工名字.......在哪里我的失败点+我必须使用联合运算符

 SELECT Dep_FName AS 'First name' ,Dep_LName AS 'Last name'  ,Em_FName AS 'Employee"s First name'
 FROM evnt_db.dependent,evnt_db.employee
 where Dep_gender='F' 
Union SELECT Dep_FName AS 'First name'  ,Dep_LName  AS 'Last name'  ,Em_FName AS 'Employee"s First name'
 FROM evnt_db.dependent as d,evnt_db.employee as e
 where d.Emp_Id=e.Em_Id ;

2 个答案:

答案 0 :(得分:1)

联合仅选择不同的值,因此可能正在过滤掉重叠的部分。另外,我也不知道为什么要为此语句使用Union,因为您是从同一张表中进行选择的。您可以在查询的前半部分的位置使用OR。

SELECT Dep_FName AS 'First name ',Dep_LName AS 'Last name '  
 FROM evnt_db.dependent
 where Dep_gender='F' OR Relationship='Wife';

如果必须使用UNION,这应该可以工作。我认为您的查询在括号中有些奇怪。同样,列名称在UNION语句中也必须相同。 'Last name '上有一个额外的空间,而其他'Last name'上没有这个空间

SELECT Dep_FName AS 'First name ',Dep_LName AS 'Last name '  
 FROM evnt_db.dependent
 where Dep_gender='F'
UNION
SELECT Dep_FName AS 'First name ',Dep_LName  AS 'Last name '  
 FROM evnt_db.dependent
 where Relationship='Wife';

如果要获取重复的记录(防止过滤重复的联合),请使用UNION ALL而不是UNION

答案 1 :(得分:0)

默认情况下,

UNION会删除重复的结果行,如果希望这些重复的结果行,可以使用UNION ALL

如果您不想要这些重复项,则当前查询已解决了该问题;尽管在这种情况下,您也应该考虑Kevin的回答。

无论如何,如果您有非F妻子的相关行,则应该只希望看到后一个查询的结果。