1

さまざまな mysql テーブルからデータを取得するスクリプトを作成しています。

#!/bin/bash
/usr/bin/mysql --password=****** --database=mydb<<EOMYSQL
select field1, field2 from table1 left join table2 on etc
into outfile '/home/jm/mysql/file1.txt';
select field3 from table3 left join table4 on etc
into outfile '/home/jm/mysql/file2.txt';
select field4,field5,field6,field7 from table5 left join table6 on etc
into outfile '/home/jm/mysql/file3.txt';
EOMYSQL

私の「問題」は、3 つの異なる出力ファイルを使用し、後でそれらをマージする必要があることです。3 つのクエリの出力をまとめて取得する方法はありますか?

field1 field2 field3 field4 field5 field6 field7 

ありがとう、

PS: 「ユニオンオール」を試してみましたが、クエリごとに同じ数のフィールドが必要なようです。

4

4 に答える 4

3

はい、UNIONクエリごとに同じ数のフィールドが必要ですが、たとえば空の文字列で入力できます。

select field1, field2, "", "", "", "", "" from table1 left join table2 on etc
union
select "", "", field3, "", "", "", "" from table3 left join table4 on etc
union
select "", "", "", field4, field5, field6, field7 from table5 left join table6 on etc

また、使用することができますNULL

select field1, field2, NULL, NULL, NULL, NULL, NULL from table1 left join table2 on etc
union
select NULL, NULL, field3, NULL, NULL, NULL, NULL from table3 left join table4 on etc
union
select NULL, NULL, NULL, field4, field5, field6, field7 from table5 left join table6 on etc
于 2013-01-02T13:23:57.783 に答える
1

サンプル データやテーブル構造さえ見なくても、SQL でこれを実行したい場合は、次を使用できる可能性があります。

各クエリ結果間で結合できるフィールドがある場合は、 a を使用しLEFT JOINてデータを返すことができます。

select *
from
(
  select t1.field1, t1.field2
  from table1 t1
  left join table2 t2
    on t1.field1 = t2.field1
) t1t2
left join
(
  select t3.field3
  from table3 t3
  left join table4 t4
    on t3.field3 = t4.field3
) t3t4
  on t1t2.field1 = t3t4.field3
left join
(
  select t5.field4, t5.field5, t5.field6, t5.field7
  from table5 t5
  left join table6 t6
    on t5.field4 = t6.field4
) t5t6
  on t1t2.field1 = t5t6.field4;

デモで SQL Fiddle を参照してください

結合できるフィールドがない場合は、次を使用できますCROSS JOIN

select *
from
(
  select t1.field1, t1.field2
  from table1 t1
  left join table2 t2
    on t1.field1 = t2.field1
) t1t2
cross join
(
  select t3.field3
  from table3 t3
  left join table4 t4
    on t3.field3 = t4.field3
) t3t4
cross join
(
  select t5.field4, t5.field5, t5.field6, t5.field7
  from table5 t5
  left join table6 t6
    on t5.field4 = t6.field4
) t5t6;

デモで SQL Fiddle を参照してください

于 2013-01-02T13:23:10.653 に答える
1

これらのファイルを列ごとに結合する場合は、次のpasteユーティリティを使用する必要があります。

cd /home/jm/mysql/
paste file1.txt file2.txt file3.txt
于 2013-01-02T13:15:38.157 に答える
1

pasteコマンドが必要なようです。

% cat A.csv 
dog,cat
bird,tiger

% cat B.csv 
bear,lion
weasel,trout

% paste -d, A.csv B.csv 
dog,cat,bear,lion
bird,tiger,weasel,trout

フラグは-d区切り文字を変更します (デフォルトは TAB です)。

于 2013-01-02T13:18:21.037 に答える