当前位置:Gxlcms > mysql > sqlunion查询实现复杂查询

sqlunion查询实现复杂查询

时间:2021-07-01 10:21:17 帮助过:43人阅读

union是一个联合查询,他可以选择2个或更多的表的数据集进来各类操作,有时我们要过滤重复等都是可以的,好面来看看实例吧。

UNION查询,让您结合2个或更多的“选择”查询的结果集。它消除了各种“选择”报表之间的重复行。

每个内部查询的SQL语句必须在结果中相同的字段数套类似的数据类型。

UNION查询的语法是:

代码如下
field1, field2, . field_n
from tables
UNION
select field1, field2, . field_n
from tables;


Example #1

The following is an example of a UNION query:

代码如下

select supplier_id
from suppliers
UNION
select supplier_id
from orders;

在这个例子中,如果supplier_id出现在供应商和订单表,它会出现在您的结果集一次。会删除重复内容。

例#2 - ORDER BY子句

下面是一个UNION查询,使用ORDER BY子句

代码如下
select supplier_id, supplier_name
from suppliers
where supplier_id > 2000
UNION
select company_id, company_name
from companies
where company_id > 1000
ORDER BY 2;

问:我需要比较两个日期和返回日期值的基础上的一个字段计数。例如,我在一个表的日期字段称为最后更新日期。我要检查,如果TRUNC(last_updated_date> = TRUNC(SYSDATE- 13)。

答:由于您使用的是这是一个聚合函数COUNT函数,我们建议你使用UNION查询。例如,你可以尝试以下方法:

代码如下

SELECT a.code as Code, a.name as Name, count(b.Ncode)
FROM cdmaster a, nmmaster b
WHERE a.code = b.code
and a.status = 1
and b.status = 1
and b.Ncode <> 'a10'
and trunc(last_updated_date) <= trunc(sysdate-13)
group by a.code, a.name
UNION
SELECT a.code as Code, a.name as Name, count(b.Ncode)
FROM cdmaster a, nmmaster b
WHERE a.code = b.code
and a.status = 1
and b.status = 1
and b.Ncode <> 'a10'
and trunc(last_updated_date) > trunc(sysdate-13)
group by a.code, a.name;

人气教程排行