union组合结果集时的order问题
如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。
近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理。但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服。仔细查看了MS的在线帮助,在有关UNION的描述中找到这样一段说明:
如果使用 UNION 运算符,那么各个 SELECT 语句不能包含它们自己的 ORDER BY 或 COMPUTE 子句。而只能在最后一个 SELECT 语句的后面使用一个 ORDER BY 或 COMPUTE 子句;该子句适用于最终的组合结果集。只能在各个 SELECT 语句中指定 GROUP BY 和 HAVING 子句。
在这段说明中并没有说union不能用于group,而是说在各个Select中不能包含order by,而在我的语句中恰恰就有这个,看来是我猜错了。试了一下把order去掉,果然不会报错了。也就是说,使用union的时候,各查询group是可以的,但不能order或compute。那如果说非要group,有没有办法呢?正常情况下只能在最后使用,而且是针对组合后的结果集进行排序的,而我刚才所说的group,就不能用于最终结果集,而只能用于每个查询。
这是正常的用法,有些人想在每个查询中先排序,然后再union,也有非正常的用法,类似:
select * from (select a from [table] order by a) union ...
另外,union后面还可以加上all,在默认情况下,union时会删除重复的项,如果加上all则不进行筛选,组合所有的结果。如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C 言語での Union の使用は、異なるデータ型を同じメモリ位置に格納できるようにする特別なデータ型です。Union を使用すると、メモリ領域を節約し、異なるデータ型間の変換を容易にすることができます。 Union を使用する場合は、対応するメンバーが有効であり、同時にアクセスできるメンバーは 1 つだけであることに注意する必要があります。

MySQL で FULLOUTERJOIN 関数を使用して 2 つのテーブルの結合を取得する方法 MySQL の FULLOUTERJOIN 関数は、内部結合と外部結合を組み合わせた強力な結合操作です。これを使用すると、2 つのテーブルの和集合を取得できます。つまり、2 つのテーブル内のすべてのデータを 1 つの結果セットに結合できます。この記事では、FULLOUTERJOIN 関数の使用法を紹介し、読者の理解を深めるためにいくつかのサンプル コードを提供します。 FULLOUTERJOIN関数

1. ユニオンは複数テーブル接続クエリの手法ではなく、複数のクエリ文のクエリ結果を 1 つの結果に結合し、重複データを削除します。 2. 全外部結合は、左のテーブルと右のテーブルのデータを問い合わせて、接続条件に従って接続します。例 #左外側の Aunion と右外側の BSELECT*FROMt_categorycLEFTOUTERJOINt_productpONc.cid=p.cnounionSELECT*FROMt_categorycRIGHTOUTERJOINt_productpONc.cid=p.cno を使用する

データ本体の共存を実装するための Union クラスを定義します。C/C++ 言語では、ユニオン (ユニオンとも呼ばれます) は、構造体に似たデータ構造です。構造体と同様に、共用体には多くのデータ型と変数を含めることができます。両者の違いは次のとおりです: 構造体のすべての変数は「共存」し、すべての変数は同時に有効になります。各変数は異なるメモリ空間を占有します。共用体では、各変数は「相互に排他的」であり、同時に有効なのは 1 つの変数だけであり、すべての変数が同じメモリ空間を占有します。複数のデータがメモリを共有する必要がある場合、または一度に複数のデータのうち 1 つだけを取得する必要がある場合は、共用体を使用できます。 Javaで

多くのデータベース アプリケーションでは、複数のデータ ソースからのデータを統合する必要がある状況に直面します。 MySQL の UNION ステートメントは、この状況を解決する方法であり、2 つ以上の SELECT ステートメントの結果セットを 1 つにマージできます。これは非常に便利な機能ですが、UNION ステートメントが最適化されていない場合、システムでパフォーマンスの問題を引き起こす可能性もあります。この記事では、MySQL を通じて UNION を最適化してパフォーマンスを向上させる方法について説明します。 U の使用中に UNIONALL を使用する

Union を使用して Like ステートメントを最適化する 1) 場合によっては、クエリ内の比較に or 演算子を使用する必要があります。 or キーワードが where 句で頻繁に使用されすぎると、MySQL オプティマイザがレコードを取得するために誤ってフル テーブル スキャンを選択する可能性があります。 Union 句を使用すると、特にクエリの一方に最適化されたインデックスがあり、もう一方のクエリにも最適化されたインデックスがある場合に、クエリの実行が高速になります。たとえば、first_name と last_name にそれぞれインデックスがある場合、次のクエリ ステートメントを実行します: mysql>select*fromstudentswherefirst_namelike'A

PHP 関数「mysqli_fetch_assoc」を使用して、結果セットから行を連想配列としてフェッチする PHP では、データベースとの対話は一般的なタスクです。 SELECT クエリを実行して結果セットを取得する場合、通常は、その後の処理のために結果セット内のデータを PHP 配列に保存する必要があります。 PHP には結果セットを処理するための複数の関数が用意されており、よく使用される関数の 1 つが「mysqli_fetch_assoc」です。この関数は結果セットから行を取得します

1. Union 演算子は、2 つ以上の select ステートメントの結果を結果セットに結合するために使用されます。複数の select ステートメントを実行すると、重複したデータが削除されます。 2. Union を使用して結果セットをマージする場合、2 つの結果セットの列の数が同じである必要があります。例selectplayerno,townfromPLAYERSwheretown='Inglewood' Unionselectplayerno,townfromPLAYERSwheretown='Plymouth';
