.如何使用UNION子句,它必须符合哪两条基本准则?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.如何使用UNION子句,它必须符合哪两条基本准则?相关的知识,希望对你有一定的参考价值。

参考技术A union 是两个select语句 的连接符,用于拼接两个查询结果。必须保证:
1.查询语句的结果列数一致,别名或者列名一致。
2.结果列数的结果类型类型一致或者能隐式转换。

0. 排序可以在结果集之中多加一列,如某个select使用 "1",另一个使用"2",并且取好别名,在最后用order by 排序。
参考技术B 数据库 Translate-SQL 中 的运算符,将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。使用 UNION 组合两个查询的结果集的两个基本规则是:   
1 、 所有查询中的列数和列的顺序必须相同。   
2 、 数据类型必须兼容。   
例句:   select top 100 aa.keyno,aa.commtype from comminfo aa   union all   select bb.userno,bb.corpname from userinfo bb   
将comminfo表和userinfo表中的字段合成一个结果集(可能有重复数据,不过效率较高)  

 select top 100 aa.keyno,aa.commtype from comminfo aa   union   select bb.userno,bb.corpname from userinfo bb   
将comminfo表和userinfo表中的字段合成一个结果集(没有有重复数据,效率较union all 低点)

先百度,再出来发问吧

参考资料:http://baike.baidu.com/view/109447.htm

本回答被提问者采纳

子句嵌套的 BigQuery 不符合预期

【中文标题】子句嵌套的 BigQuery 不符合预期【英文标题】:Clausing a nested BigQuery doesn't as expected 【发布时间】:2020-06-11 12:55:45 【问题描述】:

我基本上是在尝试查询一个名为 hits.CustomDimension.index 的列,所以我必须嵌套多次才能访问数据。我正在尝试过滤,因此它只显示 hits.CustomDimension.index = 16 的行以及下面的查询,但它返回所有 CustomDimension 行以获取任何具有 CustomDimension.index = 16 某处的观察。 不知道我做错了什么?正如您在我添加的图像中看到的那样,仍然出现 customDimension.index = 16 的所有自定义维度,我只希望将其展平。

SELECT * EXCEPT(hit, hits)

FROM ***,

UNNEST(hit) h

CROSS JOIN UNNEST(customDimensions) cd 

WHERE cd.index = 16 AND timeOnSite IS NOT NULL

【问题讨论】:

【参考方案1】:

下面试试

SELECT * 
FROM ******.ga_sessions_export, 
UNNEST(hits) h 
CROSS JOIN UNNEST(h.customDimensions) cd 
WHERE cd.index = 16 
LIMIT 10   

原始查询中的问题是您不是按 hits.customDimensions 过滤,而是按名为 customDimensions 的单独字段过滤

对比

【讨论】:

同样的问题。它会在自定义维度 11 出现的任何观察结果中返回所有自定义维度 那么我认为你应该用更多的细节/例子更好地定义你的问题 再仔细阅读我的回答!你可能会注意到一些有用的东西。这是答案的重点 @linacar231 这个解决方案是对的。您可能对字段感到困惑(GA 数据有三个名为 customDimensions 的字段)【参考方案2】:

自定义维度存储为数组。如果您只想查看特定的自定义维度,可以从 select 语句中排除匹配和匹配列。

SELECT * EXCEPT(hits, hit),
FROM ******.ga_sessions_export, 
UNNEST(hits) hit,
UNNEST(customDimensions) cd
WHERE cd.index = 16
LIMIT 10

【讨论】:

这仍然返回任何出现 cd.index = 16 的观察结果!附上它的外观图片 啊,我明白了。你只想看到 cd.index = 16。我现在正在编辑它。

以上是关于.如何使用UNION子句,它必须符合哪两条基本准则?的主要内容,如果未能解决你的问题,请参考以下文章

子句嵌套的 BigQuery 不符合预期

为啥在mysql中第一个union两个子句的order by不起作用

组合查询

SQL Server:如何将 UNION 与两个都有 WHERE 子句的查询一起使用?

hive UNION和子查询

如何将 UNION 更改为 IN 子句?