1

現在、そのように見えるSQLクエリを使用しています。

SELECT 
'Name',
'Department' 
UNION ALL tb1.Name, 
tb2.Department FROM tb1 
LEFT OUTER JOIN tb2 ON 
tb1.MyIndex = tb2.MyIndex 
ORDER BY Name, Department ASC;

私が抱えているジレンマは、注文が実際には必要な方法で機能していないことです。エクスポートのためにヘッダーをクエリの先頭に配置する必要があります。また、部門が正しく順序付けされていません。私の出力は次のようになります。

David   |    1
Joe     |    1
Phil    |    3
George  |    2
Name    | Department

これで、ヘッダーを取り出すと、問題なく列で並べ替えることができます

SELECT tb1.Name, tb2.Department
FROM tb1 LEFT OUTER JOIN tb2 ON
tb1.MyIndex = tb2.MyIndex
ORDER BY tb1.Name, tb2.Department

そして、私の出力は良く見えるでしょう。

David   |    1
Joe     |    1
George  |    2
Phil    |    3

1つを除いて、このクエリは次のように終了します。

INTO OUTFILE 'file.txt' FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '' LINES
TERMINATED BY '\n'

このファイルをインポートするときはヘッダーが必要ですが、ヘッダーを入れるときは列名ではなくヘッダーを検索する必要があり、ORDER BYも正しく機能しないため、質問はどのように注文するかです。結果は

ORDER BY tb1.Name, tb2.Department 

結果がこの投稿の2番目の結果セットのようになりますが、ヘッダーが含まれていますか?

4

2 に答える 2

2

これを正しく行うには、ユニオンからの出力の順序に依存しないでください。代わりに、明示してください。

select name, department
from (SELECT 'Name' as name, 'Department' as department, 1 as isheader
      UNION ALL
      SELECT tb1.Name, tb2.Department, 0 as isheader
      FROM tb1 LEFT OUTER JOIN tb2
           ON tb1.MyIndex = tb2.MyIndex
     ) t
ORDER BY isheader desc, tb1.Name, tb2.Department+0

明確にするために、ドキュメントには次のように書かれています。

ただし、個々のSELECTステートメントにORDER BYを使用しても、UNIONはデフォルトで順序付けされていない行のセットを生成するため、最終結果に行が表示される順序については何も意味しません。

于 2013-03-22T15:31:53.610 に答える
1

サブクエリを使用してこれを実行できるはずです。

SELECT 
  'Name' as header1,
  'Department' as header2 
UNION ALL 
select 
  suq_query.Name,
  suq_query.Department
from
(
  select tb1.Name, 
    tb2.Department 
  FROM tb1 LEFT OUTER JOIN tb2 ON tb1.MyIndex = tb2.MyIndex 
  ORDER BY Name ASC, Department ASC
) as suq_query
INTO OUTFILE 'file.txt' 
FIELDS TERMINATED BY '|' 
OPTIONALLY ENCLOSED BY '' LINES
TERMINATED BY '\n';
于 2013-03-22T15:26:25.677 に答える