如何结合所有两个表但列数不同

时间:2014-07-20 04:23:21

标签: mysql sql

SELECT * 
  FROM database1.orders 
 WHERE number LIKE "111" 
 UNION ALL 
SELECT * 
  FROM database2.orders 
 WHERE number LIKE "111"

但是我收到了错误:

  

使用的SELECT语句具有不同的列数

因为运行SELECT * FROM database2.orders WHERE number LIKE "111"给我一个结果为空。

我需要选择所有列,并且列数太多,因为我需要计算分页和显示数据吗?

如何将其与查询合并,因为查询可帮助我处理分页

感谢帮助!

1 个答案:

答案 0 :(得分:1)

UNION操作需要在两个联合查询上相同数量的列,此列必须属于同一类型。您得到的错误是因为这两个不同数据库上的表顺序具有不同的列数。

为了实现您想要的目标,您必须从database1中的order表中指定所有列,确保database2上的order表具有相同的列。

有些像你这样的情况,这些表不匹配,所以你必须“创建”和匹配的虚拟列。像这样:

将您的database1.orders称为A,B,C列,而database2.orders包含D,E,F,G列,查询必须为:

select A, B, C, NULL as anAlias 
  from database1.orders
 UNION ALL
select D, E, F, G
  from database2.orders

如果您的database1.orders列数较少,那么database2.orders就会相反。

请理解,要执行此操作,列必须是相同的类型。所以在我的例子中A匹配D,B匹配E,依此类推。 NULL值将是与G

匹配的缺失列

修改

如果您的两个数据库订单表在每个数据库上都有相同的列,那么您的问题是因为这两个表具有不同的字段创建顺序,例如database1.orders具有A, B, C, D和{{1你有database2.orders 这就是你不应该将 A, C, D, B与union子句一起使用的原因。