如何在两个表之间执行联合操作?

时间:2014-05-14 07:11:17

标签: mysql c

在两个表之间执行union运算符之后,其中一个表中的列为空,结果显示在第二行...我不知道为什么会发生这种情况......?任何人都可以澄清我的怀疑吗?

我的表格是sample1和sample2 两个表都包含Id,Empname,Location

表中的数据是

  101    Null    NUll
  102    aaaa   sec

表2中的数据是

  103    bbbb    hyd
  102    cccc    gdv

查询:

    (select EmpName,Location
    from sample1)
    union
    (select EmpName,Location
    from sample2) 


Output
  EMPNAME         LOCATION

    aaaa          sec
    bbbb           hyd
    cccc           gdv

2 个答案:

答案 0 :(得分:1)

要从结果中删除空记录,请尝试以下操作:

(select EmpName,Location
from sample1
WHERE EmpName IS NOT NULL
  AND Location IS NOT NULL)
union 
(select EmpName,Location
from sample2
WHERE EmpName IS NOT NULL
  AND Location IS NOT NULL) 

结果:

EMPNAME   LOCATION
vijay     ngdv
suresh    hyd
ajay      hyd

请参阅SQL Fiddle中的结果。

修改

我猜这个记录包含空字符串或空格而不是空格。所以试试这个:

(select EmpName,Location
from sample1
WHERE LENGTH(TRIM(EmpName)) >0
  AND LENGTH(TRIM(Location)) >0)
union 
(select EmpName,Location
from sample2
WHERE LENGTH(TRIM(EmpName)) >0
  AND LENGTH(TRIM(Location)) >0)

请参阅SQL Fiddle中的结果。

<强>解释

LENGTH(TRIM(EmpName))将从中删除空格后返回字段EmpName的长度。

答案 1 :(得分:0)

如何在两个表之间执行联合操作?

你必须在以下情况下使用union运算符,

1.您在多个表中有类似的信息,并且您想从所有表中检索行   他们马上就到了。

2.您想从同一个表中选择几组行,但条件是   表征每个集合并不容易编写为单个WHERE子句。 UNION允许检索   每个集合在自己的SELECT语句中使用更简单的WHERE子句;检索的行   每个都被组合并作为最终查询结果生成。

注意:它不是你问题的完美答案,但它有助于理解联盟        操作

请参阅此http://www.mysqlfaqs.net/mysql-faqs/Funtions-and-Operators/How-does-union-work-in-MySQL