我正在编写一个脚本,它从不同的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:试过“all all”但看起来每个查询都需要相同数量的字段。
答案 0 :(得分: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
答案 1 :(得分:1)
如果要按列加入这些文件,则应使用paste
实用程序:
cd /home/jm/mysql/
paste file1.txt file2.txt file3.txt
答案 2 :(得分: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)。
答案 3 :(得分:1)
如果您不想查看任何示例数据甚至是表结构,如果您想在SQL中执行此操作,那么可能可以使用以下内容。
如果您有一个可以在每个查询结果之间加入的字段,那么您可以使用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;
如果您没有可以加入的字段,那么您可以使用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;