mysql将两个结果“粘贴”在一起(并排)

时间:2016-11-08 09:05:13

标签: mysql sql

我想在unix中使用paste命令,它需要两个文件并打印第一行,第一个文件,然后是分隔符,然后是第二个文件的第一行,然后是换行符,然后是第一个文件分隔符的第二行第二行来自第二档等的行

所以我想在sql中使用这样的东西,从两个表中获取列,输出结果,从第一个和第二个表开始的第一行(作为一行)的列,然后从两个表中获取第二行等。没有像第一个那样的交叉连接从第一个表行,第二个表从第二个表等。这甚至可能吗?很难在网上搜索这个......

编辑:

Table 1:          Table 2:
column bla        column cla
a                 80
z                 7
f                 15
k

Expected result:
column bla, column cla
a, 80
z, 7
f, 15
k, NULL

很简单:),除了根本没有......

EDIT2: 请不要@variables

3 个答案:

答案 0 :(得分:1)

create table if not exists first_40482804 (
    bla varchar(50)
) ;

create table if not exists second_40482804 (
    cla int
) ;

truncate table first_40482804 ;
truncate table second_40482804 ;

insert into first_40482804 ( bla ) values ('a') ;
insert into first_40482804 ( bla ) values ('z') ;
insert into first_40482804 ( bla ) values ('f') ;

insert into second_40482804 ( cla ) values ( 80 ) ;
insert into second_40482804 ( cla ) values ( 7 ) ;
insert into second_40482804 ( cla ) values ( 15 ) ;

set @blaRow = 0 ;
set @claRow = 0 ;

select concat( `first`.bla,',',`second`.cla) paste from
(   
    select @blaRow:=@blaRow+1 `row` , bla from first_40482804
) `first`
left join 
(
    select @claRow:=@claRow+1 `row` , cla from second_40482804
) `second`
on `first`.`row` = `second`.`row`

- 结果

paste
a,80
z,7
f,15

答案 1 :(得分:1)

MYSQL中没有ROWNUMBER设施,但您可以像这样模仿它:

SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r

所以你可以让2个查询返回每个表的行号:

SELECT bla, @rownum := @rownum + 1 AS rank
  FROM table_1 , (SELECT @rownum := 0) r1


SELECT bla, @rownum := @rownum + 1 AS rank
  FROM table_2 , (SELECT @rownum := 0) r2     

并将它们连接在行号

SELECT
    CONCAT( T1.bla,',',T2.cla) 
FROM
    (   SELECT bla, @rownum := @rownum + 1 AS rank
          FROM table_1 , (SELECT @rownum := 0) r1
    ) T1
INNER JOIN
    (       SELECT cla, @rownum := @rownum + 1 AS rank
      FROM table_2 , (SELECT @rownum := 0) r2     
    ) T2
    ON T1.rank = T2.rank

当然,使用INNER join来获得您期望的结果,我猜想两个表中的行数相同,否则这对我没有意义。

编辑:由于基思发布了或多或少相同的方法,我有点迟了

答案 2 :(得分:1)

create table if not exists first_40482804 (
    bla varchar(50)
) ;

create table if not exists second_40482804 (
    cla int
) ;

truncate table first_40482804 ;
truncate table second_40482804 ;

insert into first_40482804 ( bla ) values ('a') ;
insert into first_40482804 ( bla ) values ('z') ;
insert into first_40482804 ( bla ) values ('f') ;

insert into second_40482804 ( cla ) values ( 80 ) ;
insert into second_40482804 ( cla ) values ( 7 ) ;
insert into second_40482804 ( cla ) values ( 15 ) ;

DELIMITER ;;

DROP PROCEDURE IF EXISTS get_paste_stored_procedure ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE get_paste_stored_procedure()
BEGIN

    set @blaRow = 0 ;
    set @claRow = 0 ;

    select concat( `first`.bla,',',`second`.cla) paste from
    (   
        select @blaRow:=@blaRow+1 `row` , bla from first_40482804
    ) `first`
    left join 
    (
        select @claRow:=@claRow+1 `row` , cla from second_40482804
    ) `second`
    on `first`.`row` = `second`.`row` ;

END;;
DELIMITER ;

call get_paste_stored_procedure() ;
相关问题