sql联合查询UNION问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql联合查询UNION问题相关的知识,希望对你有一定的参考价值。

小弟用JSP编写网页其中DJ,FILE是两个表个查一列数据
rs = stmt.executeQuery("SELECT data FROM dj union select num from file");
用这个读DATA数据结果可以
<%= rs.getString("data") %>
但读FILE数据时就出错
<%= rs.getString("file") %>请问应该怎么写啊怎么才能读取FILE表里的数据呢
我想对两个表里的两列数据分别显示在网页的两列里
DATA显示一列NUM显示一列

你在用union的时候为两个表中的字段指定为同一个别名,在JSP中调用那个别名就可以了。

rs = stmt.executeQuery("SELECT data FROM dj union select num as data from file");

这样为num制定了别名data

在调用的时候只要
<%= rs.getString("data") %>
就可以把两个表的数据调出来了

另外如果两个表含有相同数据,用union会排除重复项的,如果你不想排除,把union 改为union all
参考技术A 你并没有选择file列啊
SELECT data,file FROM dj union select num from file
参考技术B 你把两个表结构都写出来。

我猜想你用错SQL语句,看你的要求,很可能是将两个表连接起来,
应该用JOIN,sql语句类似于:

SELECT dj.data,file.num
FROM dj inner join file
on dj.字段=file.字段

祝你好运!

SQL Union Query - 两个访问表

【中文标题】SQL Union Query - 两个访问表【英文标题】:SQL Union Query - two access tables 【发布时间】:2019-03-06 09:14:02 【问题描述】:

我在 MS Access 中有两个相同的查询,qryLabourqryMaterials。我需要从三个字段中获取总数:Labour MinsLaser Mins$ Cost

我知道这可以使用联合查询来完成,但我已经很久没有使用联合查询了,而且我不断收到“FROM 语句错误”。

我的 SQL 是:

SELECT sum(TotalLabour) as TotalLabour,sum(TotalCost) as TotalCost,sum(TotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS TotalLabour, Sum([qryLabour].[$ Cost]) AS TotalCost, Sum([qryLabour].[Laser Mins]) AS TotalLaser
FROM qryLabour;

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS TotalLabour, Sum([qryMaterial].[$ Cost]) AS TotalCost, Sum([qryMaterial].[Laser Mins]) AS TotalLaser
FROM qryMaterial;

)

请有人告诉我哪里出错了?如果我删除***“选择”语句,我会得到两行,其中包含总计,这是我添加***语句以合并两者的时候。

【问题讨论】:

可能通过将别名放在右括号中将解决问题) M 但不确定 删除那些分号。 (;) 【参考方案1】:

请注意,但我认为您需要一个别名:

SELECT sum(u.TotalLabour) as TotalLabour,sum(u.TotalCost) as TotalCost,sum(u.TotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS TotalLabour, Sum([qryLabour].[$ Cost]) AS TotalCost, Sum([qryLabour].[Laser Mins]) AS TotalLaser
FROM qryLabour

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS TotalLabour, Sum([qryMaterial].[$ Cost]) AS TotalCost, Sum([qryMaterial].[Laser Mins]) AS TotalLaser
FROM qryMaterial

) as u

编辑:同时删除“;”在子查询中,正如@jarlh 建议的那样

【讨论】:

【参考方案2】:

谢谢杰迪普。

我实际上只是想通了,我在内部 SELECT 语句的末尾有 ;,我删除了它,并使父 SELECT 中的名称唯一。现在工作得很好。

所以正确的代码是:

SELECT sum( tempTotalLabour) as TotalLabour,sum( tempTotalCost) as TotalCost,sum( tempTotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS tempTotalLabour, Sum([qryLabour].[$ Cost]) AS  tempTotalCost, Sum([qryLabour].[Laser Mins]) AS tempTotalLaser
FROM qryLabour

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS  tempTotalLabour, Sum([qryMaterial].[$ Cost]) AS  tempTotalCost, Sum([qryMaterial].[Laser Mins]) AS  tempTotalLaser
FROM qryMaterial

) ;

干杯 克里斯

【讨论】:

以上是关于sql联合查询UNION问题的主要内容,如果未能解决你的问题,请参考以下文章

sql注入:union联合查询

MySQL联合查询

SQL联合查询

mysql 三表联合查询

如何用union合并SQL查询的数据

优化联合 sql 查询