如何在MySQL中合并两个没有id和不同列数的表

时间:2017-03-14 08:16:13

标签: mysql

我有两个不同列的表。表没有id列。它们具有相同的行数。我想在新表中合并它们。我试过这样做:

CREATE TABLE test_3_cut_dest as 
 SELECT * FROM test_3_cut_ 
  UNION 
 SELECT * FROM test_3_cut

但得到了错误:

  

每个UNION查询必须具有相同的列数

我想知道如何在不指定列列表的情况下实现两个具有不同列数的表的合并?

4 个答案:

答案 0 :(得分:1)

当不知道每个表有多少列时,我认为它不适用于select *。最好的方法就是这样:

SELECT A, B, C, D, E, F, G, H FROM test_3_cut_
UNION
SELECT A, B, NULL AS C, NULL AS D, NULL AS E, NULL AS ...  FROM test_3_cut

我这样做是因为test_3_cut的列数比test_3_cut少_

答案 1 :(得分:0)

Union的工作方式如下:

Select column1 from table1
union
select column1 from table2

选择查询中的列数必须相同。

答案 2 :(得分:0)

您必须从两个表中选择相同的列集。如果其中一个表有更多列,您可以只选择它们共享的列,也可以从表中较少的列中选择一个假值。

实施例

Table1
col1 | col2 | col3

Table2
col1 | col2

你可以这样做

select col1, col2 from Table1
union all
select col1, col2 from Table2

或者

select col1, col2, col3 from Table1
union all
select col1, col2, '' from Table2

答案 3 :(得分:0)

Union要求所有参与选择产生匹配记录集,这意味着每列的列数和兼容数据类型相同。

至于您的问题,您可以在存在不匹配的地方使用占位符。例如:

SELECT * , 'DUMMYVALUE1','DUMMYVALUE2','DUMMYVALUE3'
  FROM Table1
UNION ALL
SELECT *
  FROM Table2 ;

现在,如果table1有3个文本列,table2有6个文本列,你可以使用:

function ValidateClientname(e, t) {
    try {
        if (window.event) {
            var charCode = window.event.keyCode;
        } else if (e) {
            var charCode = e.which;
        } else {
            return true;
        }
        alert (charCode); // this will give you key value and you can pass it in if statement like  if ((charCode > 47 && charCode < 58) || (charCode ==8))
        if ((charCode > 47 && charCode < 58) )
            return true;
        else
            return false;
    } catch (err) {
        alert(err.Description);
    }
}